結果
問題 |
No.715 集合と二人ゲーム
|
ユーザー |
|
提出日時 | 2025-07-22 21:03:20 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 197 ms / 2,000 ms |
コード長 | 823 bytes |
コンパイル時間 | 3,429 ms |
コンパイル使用メモリ | 288,456 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-07-22 21:03:30 |
合計ジャッジ時間 | 9,531 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 60 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<(int)n;i++) int main(){ int n;cin>>n; vector<int> a(n); rep(i,n) cin>>a[i]; sort(a.begin(),a.end()); vector<int> u={1}; for(int i=1;i<n;i++){ if(a[i-1]+1==a[i]) u.back()++; else u.push_back(1); } vector<int> g(1010,-1); auto grandy=[&](auto &&grandy,int n)->int{ if(1010<=n) return grandy(grandy,34*10+n%34); if(g[n]!=-1) return g[n]; if(n==0) return g[0]=0; if(n<=2) return g[n]=1; set<int> s={grandy(grandy,n-2),grandy(grandy,n-3)}; for(int i=1;i<n;i++){ int j=n-i-3; if(1<=j) s.insert(grandy(grandy,j)^grandy(grandy,i)); } int res=0; while(s.count(res)) res++; return g[n]=res; }; int xsum=0; for(auto x:u) xsum^=grandy(grandy,x); cout<<(xsum==0?"Second":"First")<<"\n"; return 0; }