結果
問題 |
No.715 集合と二人ゲーム
|
ユーザー |
![]() |
提出日時 | 2018-07-21 12:31:37 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 89 ms / 2,000 ms |
コード長 | 700 bytes |
コンパイル時間 | 1,549 ms |
コンパイル使用メモリ | 56,796 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-26 04:47:06 |
合計ジャッジ時間 | 4,286 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 60 |
ソースコード
#include <stdio.h> #include <algorithm> #include <set> using namespace std; int main() { int A[170]; A[0] = 0; A[1] = 1; A[2] = 1; for (int i=3;i<170;i++){ set<int> k; k.insert(A[i-2]); k.insert(A[i-3]); for (int a=0;a<=i-3;a++){ int x = A[a] ^ A[i-3-a]; k.insert(x); } for (int j=0;;j++) if (!k.count(j)){ A[i] = j; break; } } int N,V[500500]; scanf ("%d",&N); for (int i=0;i<N;i++) scanf ("%d",&V[i]); sort(V,V+N); auto get = [&](int l){ if (l >= 136){ l = l % 34 + 136; } return A[l]; }; int l = 0, x = 0; for (int i=0;i<N;i++){ if (i && V[i-1] + 1 == V[i]) x ^= get(l++); else l = 1; x ^= get(l); } puts(x?"First":"Second"); return 0; }