UVALive - 5107 - A hard Aoshu Problem

时间:2023-03-09 04:06:44
UVALive - 5107 - A hard Aoshu Problem

题目链接: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;
     }
     ;
 }