Skip to content

Commit a33d337

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

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

rozwiazania/v/etap1/sum/sum.cpp

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

0 commit comments

Comments
 (0)