結果
問題 | No.2168 双頭ヒドラゲーム |
ユーザー | hotman78 |
提出日時 | 2022-12-20 18:15:52 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,810 bytes |
コンパイル時間 | 3,247 ms |
コンパイル使用メモリ | 232,828 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-04-29 02:53:16 |
合計ジャッジ時間 | 3,426 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,376 KB |
testcase_02 | AC | 1 ms
5,376 KB |
testcase_03 | AC | 1 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | WA | - |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | AC | 2 ms
5,376 KB |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 2 ms
5,376 KB |
testcase_20 | AC | 3 ms
5,376 KB |
testcase_21 | AC | 2 ms
5,376 KB |
testcase_22 | AC | 2 ms
5,376 KB |
testcase_23 | AC | 2 ms
5,376 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);++i) #define all(n) (n).begin(),(n).end() // カントールの標準形に直す struct tree{ vector<tree>v; tree(){ } tree operator+(const tree& b)const{ tree res; for(auto c:v){ if(!b.v.empty()&&c<b.v[0])break; res.v.emplace_back(c); } for(auto c:b.v){ res.v.emplace_back(c); } sort(res.v.begin(),res.v.end()); reverse(res.v.begin(),res.v.end()); return res; } // tree mul_omega()const{ // if(v.size()==0){ // return tree(); // } // tree res=*this; // tree one; // one.v.emplace_back(tree()); // reverse(res.v.begin(),res.v.end()); // while(res.v.size()>=2&&res.v[res.v.size()-2]==res.v[res.v.size()-1]){ // res.v.erase(res.v.end()-2); // } // reverse(res.v.begin(),res.v.end()); // res.v[0]=move(res.v[0])+one; // return res; // } tree exp(){ tree res=tree(); res.v.emplace_back(*this); return res; } // omega^a を左からかける tree mul_omega(const tree& a)const{ tree res=*this; for(auto& c:res.v){ c=a+move(c); } return res; } void print(string s=""){ for(auto e:v){ cerr<<s+"-"<<endl; e.print(s+" "); } } bool operator==(const tree&b)const{ return v==b.v; } bool operator<(const tree&b)const{ return v<b.v; } }; // (a|b) = 適当... tree string_to_tree(string s,bool b=0){ if(s=="")return tree(); assert(s[0]=='('); int idx=1,idx2=1,val=0; tree ch[2]={}; bool right=0; while(1){ if(val==0&&s[idx2]=='|'){ right=1; idx=idx2+1; idx2=idx; continue; } if(s[idx2]=='(')val++; if(val==0&&s[idx2]==')'){ break; } if(s[idx2]==')')val--; if(val==0){ if(right==0){ ch[right]=string_to_tree(s.substr(idx,idx2-idx+1),1).exp()+move(ch[right]); }else{ ch[right]=string_to_tree(s.substr(idx,idx2-idx+1),1)+move(ch[right]); } idx=idx2+1; } idx2++; } if(b==0){ return ch[1]; }else{ auto one=tree().exp(); auto res=(one+ch[1].mul_omega(one)).mul_omega(ch[0].exp().exp().exp().exp().exp().exp()); return res; } } int main(){ string s; string t; cin>>s>>t; s="(|"+s+")"; t="(|"+t+")"; auto ts=string_to_tree(s); auto tt=string_to_tree(t); // ts.print(); // tt.print(); cout<<(tt<ts?0:1)<<endl; }