結果
問題 | No.1677 mæx |
ユーザー | TKTYI |
提出日時 | 2021-09-10 22:40:05 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,337 bytes |
コンパイル時間 | 4,274 ms |
コンパイル使用メモリ | 235,500 KB |
実行使用メモリ | 11,008 KB |
最終ジャッジ日時 | 2024-06-12 01:53:53 |
合計ジャッジ時間 | 5,407 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 4 ms
6,528 KB |
testcase_01 | WA | - |
testcase_02 | AC | 3 ms
6,528 KB |
testcase_03 | AC | 4 ms
6,400 KB |
testcase_04 | WA | - |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | AC | 15 ms
9,716 KB |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | AC | 16 ms
9,856 KB |
testcase_15 | AC | 16 ms
9,728 KB |
testcase_16 | AC | 15 ms
9,696 KB |
testcase_17 | AC | 16 ms
9,728 KB |
testcase_18 | AC | 15 ms
9,784 KB |
testcase_19 | AC | 3 ms
6,528 KB |
testcase_20 | AC | 4 ms
6,528 KB |
testcase_21 | AC | 16 ms
11,008 KB |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using namespace atcoder; typedef long long int ll; typedef long double ld; #define FOR(i,l,r) for(ll i=l;i<r;i++) #define REP(i,n) FOR(i,0,n) #define RFOR(i,l,r) for(ll i=r-1;i>=l;i--) #define RREP(i,n) RFOR(i,0,n) #define ALL(x) x.begin(),x.end() #define P pair<ll,ll> #define F first #define S second #define BS(A,x) binary_search(ALL(A),x) #define LB(A,x) (ll)(lower_bound(ALL(A),x)-A.begin()) #define UB(A,x) (ll)(upper_bound(ALL(A),x)-A.begin()) #define COU(A,x) UB(A,x)-LB(A,x) template<typename T>using min_priority_queue=priority_queue<T,vector<T>,greater<T>>; using mint=modint998244353; string S;vector<P>Q(2e5); ll mex(ll A,ll B){ if(A>B)swap(A,B);if(A)return 0;if(B==1)return 2;return 1; } vector<mint>dfs(ll l,ll r){ vector<mint>res(3); if(r-l==1){if(S[l]=='?'){res[0]++;res[1]++;res[2]++;}else res[S[l]-'0']++;} else{ vector<mint>f=dfs(l+4,Q[l+3].F),s=dfs(Q[l+3].F+1,Q[l+3].S); if(S[l+1]!='a')REP(i,3)REP(j,3)res[mex(i,j)]+=f[i]*s[j]; if(S[r+1]!='e')REP(i,3)REP(j,3)res[max(i,j)]+=f[i]*s[j]; } return res; } signed main(){ ll K;cin>>S>>K;stack<ll>s; REP(i,S.size()){ if(S[i]=='(')s.push(i);if(S[i]==',')Q[s.top()].F=i; if(S[i]==')'){Q[s.top()].S=i;s.pop();} } cout<<dfs(0,S.size()).at(K).val()<<endl; return 0; }