結果
問題 | No.74 貯金箱の退屈 |
ユーザー |
![]() |
提出日時 | 2014-12-11 21:46:53 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,095 bytes |
コンパイル時間 | 421 ms |
コンパイル使用メモリ | 44,928 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-11 20:38:08 |
合計ジャッジ時間 | 1,234 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:38:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 38 | scanf("%d", &N); | ~~~~~^~~~~~~~~~ main.cpp:41:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 41 | scanf("%d", D+i); | ~~~~~^~~~~~~~~~~ main.cpp:47:31: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 47 | for(int i=0;i<N;i++){scanf("%d", W+i);} | ~~~~~^~~~~~~~~~~
ソースコード
#include <cstdio>#include <queue>int N;std::vector<int> G[100];bool used[100], cycle[100];int D[100], W[100];void addEdge(int i, int j){G[i].push_back(j);G[j].push_back(i);}bool can(int u){used[u] = true;std::queue<int> q;q.push(u);bool f = false;int n = !W[u];while(!q.empty()){int v = q.front(); q.pop();for(int w : G[v]){if(used[w]){continue;}if(cycle[w]){f = true;}if(W[w] == 0){n += 1;}used[w] = true;q.push(w);}}return f || n % 2 == 0;}int main(){scanf("%d", &N);for(int i=0;i<N;i++){scanf("%d", D+i);addEdge((i+D[i])%N, ((i-D[i])%N+N)%N);if((i+D[i]) % N == ((i-D[i])%N+N) % N){cycle[(i+D[i]) % N] = true;}}for(int i=0;i<N;i++){scanf("%d", W+i);}bool f = true;for(int i=0;i<N;i++){if(used[i]){continue;}f &= can(i);}if(f){puts("Yes");}else{puts("No");}}