結果
問題 | No.1149 色塗りゲーム |
ユーザー |
|
提出日時 | 2020-08-12 23:41:25 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 141 ms / 2,000 ms |
コード長 | 3,725 bytes |
コンパイル時間 | 1,774 ms |
コンパイル使用メモリ | 180,248 KB |
実行使用メモリ | 25,220 KB |
平均クエリ数 | 19.38 |
最終ジャッジ日時 | 2024-07-17 05:47:43 |
合計ジャッジ時間 | 8,897 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define REP(i,m,n) for(int i=(m); i<(int)(n); i++)#define RREP(i,m,n) for(int i=(int)((n)-1); i>=m; i--)#define rep(i,n) REP(i,0,n)#define rrep(i,n) RREP(i,0,n)#define all(a) (a).begin(),(a).end()#define rall(a) (a).rbegin(),(a).rend()#define fi first#define se second#define debug(...) {cerr<<"[L"<<__LINE__<<"] "; _debug(__VA_ARGS__);}template<typename T>string join(const vector<T>&v, string del=", "){ stringstream s;for(auto x : v) s << del << x; return s.str().substr(del.size());}template<typename T>ostream& operator<<(ostream& o, const vector<T>&v){if(v.size()) o << "[" << join(v) << "]"; return o;}template<typename T>ostream& operator<<(ostream& o, const vector<vector<T> >&vv){int l = vv.size();if(l){ o<<endl; rep(i,l) o << (i==0 ? "[ " : ",\n " ) << vv[i] << (i==l-1 ? " ]" : ""); }return o;}template<typename T1, typename T2>ostream& operator<<(ostream& o, const pair<T1, T2>& p){return o << "(" << p.first << ", " << p.second << ")";}inline void _debug(){cerr<<endl;}template<class First, class... Rest>void _debug(const First& first, const Rest&... rest){cerr<<first<<" ";_debug(rest...);}typedef long long ll;typedef pair<int, int> pii;typedef pair<ll, ll> pll;typedef vector<int> vi;typedef vector<vi> vvi;typedef vector<ll> vl;typedef vector<vl> vvl;const double PI = (1*acos(0.0));const double EPS = 1e-9;const int INF = 0x3f3f3f3f;const ll INFL = 0x3f3f3f3f3f3f3f3fLL;const ll mod = 1e9 + 7;inline void finput(string filename) {freopen(filename.c_str(), "r", stdin);}int main(){ios_base::sync_with_stdio(0);// finput("./input");vi grundy(110);REP(i,1,110){set<int> tmp;if(i >= 1) tmp.insert(grundy[i-1]);if(i >= 2) tmp.insert(grundy[i-2]);REP(j,1,i-1){tmp.insert(grundy[j]^grundy[i-j-1]);tmp.insert(grundy[j]^grundy[i-j-2]);}rep(j,100){if(!tmp.count(j)){grundy[i] = j;break;}}}int n; cin >> n;vi color(n+1);color[n] = 1;while(1){int now = 0;vector<pii> stat;rep(i,n){if(!color[i]) REP(j,i+1,n+1){if(color[j]){stat.emplace_back(i,j);int m = j - i;now ^= grundy[m];i = j;break;}}}int k=-1, x=-1;for(auto s : stat){int m = s.se - s.fi;if(m >= 1) if(grundy[m-1] == (now^grundy[m])){k = 1, x = s.fi;color[x] = 1;goto next;}if(m >= 2) if(grundy[m-2] == (now^grundy[m])){k = 2, x = s.fi;color[x] = 1; color[x+1] = 1;goto next;}REP(j,1,m-1){if((grundy[j]^grundy[m-j-1]) == (now^grundy[m])){k = 1, x = s.fi+j;color[x] = 1;goto next;}}REP(j,1,m-2){if((grundy[j]^grundy[m-j-2]) == (now^grundy[m])){k = 2, x = s.fi+j;color[x] = 1; color[x+1] = 1;goto next;}}}next:cout << k << " " << x+1 << endl;int t; cin >> t;if(t != 3) break;int tk,tx;cin >> tk >> tx;if(tk == 1){color[tx-1] = 1;}else{color[tx-1] = 1; color[tx] = 1;}}return 0;}