結果
| 問題 |
No.1677 mæx
|
| コンテスト | |
| ユーザー |
merlin
|
| 提出日時 | 2021-09-10 23:27:53 |
| 言語 | Java (openjdk 23) |
| 結果 |
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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 18 |
ソースコード
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]);
}
}
merlin