1. 程式人生 > >UVALive - 5107 - A hard Aoshu Problem

UVALive - 5107 - A hard Aoshu Problem

val tin ont 註意 pac cst ins -1 return

題目鏈接:https://vjudge.net/problem/UVALive-5107

題目大意:用ABCDE代表不同的數字,給出形如ABBDE___ABCCC = BDBDE的東西;

空格裏面可以填入+-*/的運算符,給字母賦予不同的值,問有多少種情況使得

等式成立。

題目分析:

可以直接用大模擬+暴力求解,註意對於重復情況的判重。

給出代碼:

技術分享
  1 #include <iostream>
  2 #include <set>
  3 #include <algorithm>
  4
#include <cstring> 5 #include <string> 6 using namespace std; 7 string a; 8 string b; 9 string c; 10 set<int> mark; 11 set<int> marks; 12 int num[30]; 13 int main() 14 { 15 int N; 16 cin>>N; 17 while(N--) 18 { 19 cin>>a>>b>>c;
20 marks.clear(); 21 int t1=a.length(); 22 int t2=b.length(); 23 int t3=c.length(); 24 for(int i=0; i<t1; i++) 25 { 26 int t=a[i]-A; 27 marks.insert(t); 28 } 29 for(int i=0; i<t2; i++) 30 {
31 int t=b[i]-A; 32 marks.insert(t); 33 } 34 for(int i=0; i<t3; i++) 35 { 36 int t=c[i]-A; 37 marks.insert(t); 38 } 39 mark.clear(); 40 // marks.clear(); 41 int cnt=0; 42 for(int i=0; i<=9; i++) 43 { 44 for(int j=0; j<=9; j++) 45 { 46 if(i==j) 47 continue; 48 for(int k=0; k<=9; k++) 49 { 50 if(k==i||k==j) 51 continue; 52 for(int m=0; m<=9; m++) 53 { 54 if(m==i||m==j||m==k) 55 continue; 56 for(int n=0; n<=9; n++) 57 { 58 if(n==i||n==j||n==m||n==k||n==m) 59 continue; 60 int ttt=marks.size(); 61 //int sum=0; 62 int ans=0; 63 for(int y=0;y<ttt;y++) 64 { 65 if(y==0) 66 ans=ans*10+i; 67 if(y==1) 68 ans=ans*10+j; 69 if(y==2) 70 ans=ans*10+k; 71 if(y==3) 72 ans=ans*10+m; 73 if(y==4) 74 ans=ans*10+n; 75 } 76 if(mark.count(ans)==1) 77 continue; 78 mark.insert(ans); 79 set<int>::iterator ite=marks.begin(); 80 for(int ans=0; ite!=marks.end(); ite++,ans++) 81 { 82 int t=*ite; 83 if(ans==0) 84 num[t]=i; 85 if(ans==1) 86 num[t]=j; 87 if(ans==2) 88 num[t]=k; 89 if(ans==3) 90 num[t]=m; 91 if(ans==4) 92 num[t]=n; 93 } 94 int flag=a[0]-A; 95 if(num[flag]==0&&t1>1) 96 continue; 97 flag=b[0]-A; 98 if(num[flag]==0&&t2>1) 99 continue; 100 flag=c[0]-A; 101 if(num[flag]==0&&t3>1) 102 continue; 103 long long int num1=0,num2=0,num3=0; 104 for(int i=0; i<t1; i++) 105 { 106 int tt=a[i]-A; 107 num1=num1*10+num[tt]; 108 } 109 for(int i=0; i<t2; i++) 110 { 111 int tt=b[i]-A; 112 num2=num2*10+num[tt]; 113 } 114 for(int i=0; i<t3; i++) 115 { 116 int tt=c[i]-A; 117 num3=num3*10+num[tt]; 118 } 119 if(num1+num2==num3) 120 cnt++; 121 if(num1-num2==num3) 122 cnt++; 123 if(num1*num2==num3) 124 cnt++; 125 if(num2!=0&&num1/num2==num3&&num1%num2==0) 126 cnt++; 127 } 128 } 129 } 130 } 131 } 132 cout<<cnt<<endl; 133 } 134 return 0; 135 }
View Code

UVALive - 5107 - A hard Aoshu Problem