File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments