atcoder NOMURAプログラミングコンテスト2020 のc問題でいくつかのケースについてWAとなってしまいます。
解説や他の人のコードをながめたりしましたが、自力で解決できなかったのでお力を貸していただけるとうれしいです。
問題文についてはこちらを参照してもらえればと思います。
https://atcoder.jp/contests/nomura2020/tasks/nomura2020_c
自分のコード
c++
1#include<iostream> 2#include<algorithm> 3#include<string> 4#include<map> 5#include<cmath> 6#include<iomanip> 7#include<math.h> 8#define rep(i, n) for(int i=0; i<n; i++) 9using namespace std; 10typedef long long ll; 11 12int main(){ 13 ll N; cin >> N; 14 ll a[N+1]; 15 ll node = 0; 16 rep(i, N+1){ 17 cin >> a[i]; 18 } 19 ll c[N+2]; 20 c[0] = 1; 21 22 for(ll i=0; i<N+1; i++){ 23 c[i+1] = 2*(c[i]-a[i]); 24 if(c[i+1] < 0){ 25 cout << -1 << endl; 26 return 0; 27 } 28 } 29 30 node += a[N]; 31 ll now = a[N]; 32 33 for(ll i=N-1; i>-1; i--){ 34 now += a[i]; 35 if(now+a[i] < c[i]){ 36 node += now; 37 }else{ 38 node += c[i]; 39 } 40 } 41 cout << node << endl; 42} 43
変更を加えたが結局うまくいかなかったコード
ACしている人のコードを参考にして以下のコードなら、上のコードでWAだったものがACできることはわかりました。
しかし、加えた記述の目的がわからないのと、下のコードでも全てのケースがACとはなりませんでした。
その辺についても説明をしてもらえるとうれしいです。
下のコードは、上のコードに変更を加えた部分を ////// で囲っています。
c++
1#include<iostream> 2#include<algorithm> 3#include<string> 4#include<map> 5#include<cmath> 6#include<iomanip> 7#include<math.h> 8#define rep(i, n) for(int i=0; i<n; i++) 9using namespace std; 10typedef long long ll; 11////////////////////////////// 12#define INF 1000000000000000LL 13////////////////////////////// 14 15int main(){ 16 ll N; cin >> N; 17 ll a[N+1]; 18 ll node = 0; 19 rep(i, N+1){ 20 cin >> a[i]; 21 } 22 ll c[N+2]; 23 c[0] = 1; 24 25 for(int i=0; i<N+1; i++){ 26 //////////////////////////////// 27 c[i+1] = min(2*(c[i]-a[i]),INF); 28 //////////////////////////////// 29 if(c[i+1] < 0){ 30 cout << -1 << endl; 31 return 0; 32 } 33 } 34 35 node += a[N]; 36 ll now = a[N]; 37 38 for(int i=N-1; i>-1; i--){ 39 now += a[i]; 40 if(now+a[i] < c[i]){ 41 node += now; 42 }else{ 43 node += c[i]; 44 } 45 } 46 cout << node << endl; 47}
よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/30 17:37 編集