結果
問題 | No.2168 双頭ヒドラゲーム |
ユーザー | hotman78 |
提出日時 | 2022-12-20 15:40:32 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,043 bytes |
コンパイル時間 | 2,821 ms |
コンパイル使用メモリ | 225,096 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-18 01:51:12 |
合計ジャッジ時間 | 3,561 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 2 ms
5,248 KB |
testcase_07 | AC | 1 ms
5,248 KB |
testcase_08 | WA | - |
testcase_09 | AC | 2 ms
5,248 KB |
testcase_10 | AC | 2 ms
5,248 KB |
testcase_11 | WA | - |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | AC | 2 ms
5,248 KB |
testcase_19 | WA | - |
testcase_20 | AC | 2 ms
5,248 KB |
testcase_21 | AC | 2 ms
5,248 KB |
testcase_22 | AC | 2 ms
5,248 KB |
testcase_23 | AC | 2 ms
5,248 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){ 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{ tree res=*this; tree one; one.v.emplace_back(tree()); for(auto& c:res.v){ c=one+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)=omega^(omega a)+omega b ? tree string_to_tree(string s){ 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){ // cerr<<s.substr(idx,idx2-idx+1)<<endl; ch[right]=string_to_tree(s.substr(idx,idx2-idx+1))+move(ch[right]); idx=idx2+1; } idx2++; } auto rtree=ch[1].mul_omega(); auto ltree=tree(); ltree.v.emplace_back(ch[0].mul_omega()); return rtree+ltree; } 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; }