2008-12-26
SRM398 Div1 Easy: CountExpressions
夜中ですが。目がさめたので練習でもするかと思い
答えが合わないのでおかしいと思ったらaを上書きしまくってた件
投稿まで11分超かかった...
class CountExpressions { int op(int x,int y,int opid){ int val=0; switch(opid){ case 0: val=x+y;break; case 1: val=x-y;break; case 2: val=x*y;break; } return val; } public: int calcExpressions(int x, int y, int val) { int cnt=0; vector<int> n(4); n[0]=n[1]=min(x,y); n[2]=n[3]=max(x,y); while(1){ int a=n[0]; rep(op1,3) { int k=a; a=op(a,n[1],op1); rep(op2,3) { int j=a; a=op(a,n[2],op2); rep(op3,3) { int i=a; a=op(a,n[3],op3); if (a==val) cnt++; a=i; } a=j; } a=k; } if(!next_permutation(all(n)))break; } return cnt; } };