■1155 How can I satisfy thee? Let me count the ways...
構文解析ゲー.変数への数の割り当て方は高々27通りなので,全部試せば良い.
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
// AC
public class Main{
Scanner sc=new Scanner(System.in);
String s;
int[] map;
void run(){
for(;;){
s=sc.next();
if(s.equals(".")){
break;
}
solve();
}
}
void solve(){
map=new int[256];
map['0']=0;
map['1']=1;
map['2']=2;
int ans=0;
for(int p=0; p<3; p++){
for(int q=0; q<3; q++){
for(int r=0; r<3; r++){
map['P']=p;
map['Q']=q;
map['R']=r;
Result res=f(0);
if(res.value==2){
ans++;
}
}
}
}
println(ans+"");
}
Result f(int p){
// debug("f",p);
if(Character.isDigit(s.charAt(p))||Character.isUpperCase(s.charAt(p))){
return new Result(p+1, map[s.charAt(p)]);
}else if(s.charAt(p)=='-'){
Result r=f(p+1);
r.value=2-r.value;
return r;
}else{
Result r=f(p+1);
Result r2=f(r.p+1); // skip '*' or '+'
if(s.charAt(r.p)=='*'){
r.value=min(r.value, r2.value);
}else{ // '+'
r.value=max(r.value, r2.value);
}
r.p=r2.p+1;
return r;
}
}
class Result{
int p, value;
Result(int p, int value){
this.p=p;
this.value=value;
}
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
void print(String s){
System.out.print(s);
}
void println(String s){
System.out.println(s);
}
public static void main(String[] args){
// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
new Main().run();
}
}
0 件のコメント:
コメントを投稿