結果
| 問題 |
No.1677 mæx
|
| コンテスト | |
| ユーザー |
たたき@競プロ
|
| 提出日時 | 2023-08-28 04:56:38 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,115 bytes |
| コンパイル時間 | 5,910 ms |
| コンパイル使用メモリ | 309,912 KB |
| 実行使用メモリ | 15,488 KB |
| 最終ジャッジ日時 | 2024-12-28 20:46:21 |
| 合計ジャッジ時間 | 55,564 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 2 TLE * 16 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using mint=modint998244353; //1000000007;
using ll=long long;
using pp=pair<int,int>;
#define sr string
#define vc vector
#define fi first
#define se second
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define pb push_back
#define all(v) v.begin(),v.end()
#define pque priority_queue
#define bpc(a) __builtin_popcount(a)
int mex(int a,int b){
int res=0;
while(res==a||res==b)res++;
return res;
}
int main(){
sr s;int k;cin>>s>>k;
int n=s.size();
auto f=[&](auto f,int l,int r)->vc<mint>{
vc<mint>res(3,0);
if(r-l==1){
if(s[l]=='?')rep(i,3)res[i]++;
else res[s[l]-'0']++;
return res;
}
int p=0;
vc<mint>ra,rb;
for(int i=l+4;i<r;i++){
if(s[i]=='(')p++;
if(s[i]==')')p--;
if(p==0&&s[i]==','){
ra=f(f,l+4,i); rb=f(f,i+1,r-1);
break;
}
}
rep(a,3)rep(b,3){
if(s[l+1]!='a')res[mex(a,b)]+=ra[a]*rb[b];
if(s[l+1]!='e')res[max(a,b)]+=ra[a]*rb[b];
}
return res;
};
auto ans=f(f,0,n);
cout<<ans[k].val();
}
たたき@競プロ