■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 件のコメント:
コメントを投稿