题目链接:https://vjudge.net/problem/UVALive-5107
题目大意:用ABCDE代表不同的数字,给出形如ABBDE___ABCCC = BDBDE的东西;
空格里面可以填入+-*/的运算符,给字母赋予不同的值,问有多少种情况使得
等式成立。
题目分析:
可以直接用大模拟+暴力求解,注意对于重复情况的判重。
给出代码:
#include <iostream> #include <set> #include <algorithm> #include <cstring> #include <string> using namespace std; string a; string b; string c; set<int> mark; set<int> marks; ]; int main() { int N; cin>>N; while(N--) { cin>>a>>b>>c; marks.clear(); int t1=a.length(); int t2=b.length(); int t3=c.length(); ; i<t1; i++) { int t=a[i]-'A'; marks.insert(t); } ; i<t2; i++) { int t=b[i]-'A'; marks.insert(t); } ; i<t3; i++) { int t=c[i]-'A'; marks.insert(t); } mark.clear(); // marks.clear(); ; ; i<=; i++) { ; j<=; j++) { if(i==j) continue; ; k<=; k++) { if(k==i||k==j) continue; ; m<=; m++) { if(m==i||m==j||m==k) continue; ; n<=; n++) { if(n==i||n==j||n==m||n==k||n==m) continue; int ttt=marks.size(); //int sum=0; ; ;y<ttt;y++) { ) ans=ans*+i; ) ans=ans*+j; ) ans=ans*+k; ) ans=ans*+m; ) ans=ans*+n; } ) continue; mark.insert(ans); set<int>::iterator ite=marks.begin(); ; ite!=marks.end(); ite++,ans++) { int t=*ite; ) num[t]=i; ) num[t]=j; ) num[t]=k; ) num[t]=m; ) num[t]=n; } ]-'A'; &&t1>) continue; flag=b[]-'A'; &&t2>) continue; flag=c[]-'A'; &&t3>) continue; ,num2=,num3=; ; i<t1; i++) { int tt=a[i]-'A'; num1=num1*+num[tt]; } ; i<t2; i++) { int tt=b[i]-'A'; num2=num2*+num[tt]; } ; i<t3; i++) { int tt=c[i]-'A'; num3=num3*+num[tt]; } if(num1+num2==num3) cnt++; if(num1-num2==num3) cnt++; if(num1*num2==num3) cnt++; &&num1/num2==num3&&num1%num2==) cnt++; } } } } } cout<<cnt<<endl; } ; }