結果
問題 | No.1677 mæx |
ユーザー | merlin |
提出日時 | 2021-09-10 23:27:53 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 224 ms / 2,000 ms |
コード長 | 2,221 bytes |
コンパイル時間 | 3,154 ms |
コンパイル使用メモリ | 79,176 KB |
実行使用メモリ | 47,512 KB |
最終ジャッジ日時 | 2024-06-12 04:26:36 |
合計ジャッジ時間 | 7,996 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 58 ms
37,004 KB |
testcase_01 | AC | 58 ms
37,072 KB |
testcase_02 | AC | 59 ms
36,816 KB |
testcase_03 | AC | 59 ms
37,192 KB |
testcase_04 | AC | 194 ms
46,128 KB |
testcase_05 | AC | 208 ms
45,500 KB |
testcase_06 | AC | 207 ms
45,596 KB |
testcase_07 | AC | 188 ms
45,916 KB |
testcase_08 | AC | 190 ms
46,180 KB |
testcase_09 | AC | 203 ms
45,664 KB |
testcase_10 | AC | 207 ms
45,568 KB |
testcase_11 | AC | 195 ms
47,076 KB |
testcase_12 | AC | 209 ms
47,392 KB |
testcase_13 | AC | 205 ms
45,684 KB |
testcase_14 | AC | 220 ms
45,788 KB |
testcase_15 | AC | 224 ms
45,700 KB |
testcase_16 | AC | 222 ms
47,512 KB |
testcase_17 | AC | 216 ms
45,692 KB |
testcase_18 | AC | 223 ms
45,496 KB |
testcase_19 | AC | 58 ms
37,004 KB |
testcase_20 | AC | 62 ms
37,228 KB |
testcase_21 | AC | 221 ms
46,468 KB |
ソースコード
import java.io.*; import java.util.*; class Main { public static void main(String args[])throws Exception { BufferedReader bu=new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb=new StringBuilder(); String s=bu.readLine(); int n=s.length(); Stack<Integer> st=new Stack<>(); Stack<long[]> val=new Stack<>(); //0-( 1-max 2-mex 3-m?x 4-0,1,2,? int i; long M=998244353; for(i=0;i<n;i++) { char ch=s.charAt(i); if(ch==',') continue; if(ch=='(') {}//do nothing else if(ch!=')') { int add=-1; long adr[]=new long[3]; if(ch=='m') { if(s.charAt(i+1)=='?') add=3; else if(s.charAt(i+1)=='e') add=2; else add=1; i+=2; } else { add=4; if(ch=='?') adr[0]=adr[1]=adr[2]=1; else adr[ch-'0']=1; } st.add(add); val.add(adr); } if(ch!=')') continue; long c1[]=val.pop(),c2[]=val.pop(),c3[]=val.pop(); st.pop(); st.pop(); int op=st.pop(); int j,k,mex; boolean v[]=new boolean[3]; for(j=0;j<3;j++) for(k=0;k<3;k++) if(op==1) c3[Math.max(j,k)]=(c3[Math.max(j,k)]+c1[j]*c2[k]%M)%M; else if(op==2) { v[0]=v[1]=v[2]=false; v[j]=v[k]=true; mex=0; while(mex<3 && v[mex]) mex++; c3[mex]=(c3[mex]+(c1[j]*c2[k])%M)%M; } else { c3[Math.max(j,k)]=(c3[Math.max(j,k)]+c1[j]*c2[k]%M)%M; v[0]=v[1]=v[2]=false; v[j]=v[k]=true; mex=0; while(mex<3 && v[mex]) mex++; c3[mex]=(c3[mex]+(c1[j]*c2[k])%M)%M; } val.add(c3); st.add(4); } int k=Integer.parseInt(bu.readLine()); System.out.println(val.pop()[k]); } }