SRM 398 DIV1 Easy - CountExpressions

問題


http://community.topcoder.com/stat?c=problem_statement&pm=8157&rd=12170

解き方


O(4! * 3^3)なので全探索可能。

x2つ、y2つの全ての並べ方、+、ー、*の全ての並び方に対して
valと一致するものの数を数えれば良い。

next_permutationを使えば重複しない。

コード


class CountExpressions {

public:

int calc(int x,int y,int op){
if(op==0)return x+y;
if(op==1)return x-y;
return x*y;
}

int calcExpressions(int x, int y, int val) {
vector<int> num(4,0);
num[0]=x,num[1]=x,num[2]=y,num[3]=y;
sort(all(num));

int ret=0;
do{
int cur=0;
FORE(i,0,3)FORE(j,0,3)FORE(k,0,3){
cur=calc(num[0],num[1],i);
cur=calc(cur,num[2],j);
cur=calc(cur,num[3],k);
if(cur==val)ret++;
}
}while(next_permutation(all(num)));

return ret;
}

};

Share this

Related Posts

Previous
Next Post »