AtCoder ABC 059 - Sequence の不明点
AtCoder ABC 059 C - Sequenceにて、解法がわからなかったので解答の例を調べるも不明点(解答コード)がよく分からなかったため質問します。
問題:https://atcoder.jp/contests/abc059/tasks/arc072_a
以下、ネットの解答例を参考に作成したのですが、slove関数のif文で偶奇数で変数nowの正負の時に何を行なっているのかが分かりません。
実装コード
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4long long n; 5vector<long long> a; 6 7long long solve(int x); 8 9int main() { 10 cin >> n; 11 for(int i = 0; i < n; ++i) { 12 int x; 13 cin >> x; //項の一つ一つ 14 a.push_back(x); 15 } 16 cout << min(solve(0), solve(1)) << endl; 17 return 0; 18} 19 20long long solve(int x) { //引数は0か1 21 long long ans = 0, now = 0; 22 23 for(long long i = 0; i < n; ++i) { 24 now += a[i]; //累積和 25 26 if((i % 2 == x) && (now >= 0)) { 27 ans += now + 1; //ans = ans + now + 1 28 now = -1; 29 } 30 if(!(i % 2 == x) && (now <= 0)) { 31 ans -= now - 1; 32 now = 1; 33 } 34 } 35 return ans; 36}
具体的な不明部分
if((i % 2 == x) && (now >= 0)) { ans += now + 1; //ans = ans + now + 1 now = -1; } if(!(i % 2 == x) && (now <= 0)) { ans -= now - 1; now = 1; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/08 11:26
2020/10/08 12:08