Skip to content

Commit 0e8c7d0

Browse files
committed
Dodano rozwiązanie zadania 'Suma ciągu jedynkowego' z V OI
1 parent 39b46e3 commit 0e8c7d0

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

rozwiazania/v/etap1/sum/sum.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Rozwiązanie zadania 'Suma ciągu jedynkowego' z I Etapu V OI.
2+
// Autor: Paweł Putra
3+
// Złożoność czasowa: O(n).
4+
// Złożoność pamięciowa: O(1).
5+
// Punkty: 100 (upsolve)
6+
7+
#include <iostream>
8+
using namespace std;
9+
constexpr int MAXN = 10'005;
10+
int32_t main() {
11+
ios_base::sync_with_stdio(0);
12+
int n, S;
13+
cin >> n >> S;
14+
15+
bool ujemny = false;
16+
if (S < 0) {
17+
ujemny = true;
18+
S = -S;
19+
}
20+
21+
// Mamy ciąg decyzji czy następny element będzie ostatnim +1 czy -1.
22+
// Zmiana decyzji nie zmienia parzystości.
23+
int max_suma = (n - 1) * n / 2;
24+
if (max_suma < S || max_suma % 2 != S % 2) {
25+
cout << "NIE\n";
26+
return 0;
27+
}
28+
29+
cout << "0\n";
30+
int obecny = 0;
31+
32+
// Zaczynamy z ciągu z samymi +1.
33+
int zmniejszen = (max_suma - S) / 2;
34+
for (int i = 1; i < n; i++) {
35+
// Zmiana z +1 na -1 w tym miejscu zmniejszy sumę o (n-1) * 2.
36+
if (n - i <= zmniejszen) {
37+
obecny--;
38+
zmniejszen -= n-i;
39+
} else {
40+
obecny++;
41+
}
42+
cout << (ujemny ? -obecny : obecny) << "\n";
43+
}
44+
}

0 commit comments

Comments
 (0)