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