hdu3699(不等式dfs)
生活随笔
收集整理的這篇文章主要介紹了
hdu3699(不等式dfs)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:
給出三個(gè)串,只由A~E組成,每個(gè)串的長(zhǎng)度最長(zhǎng)是8,字符相同代表那個(gè)位置的數(shù)字相同,數(shù)字可以是0~9,例如:
ABBDE() ABCCC=BDBDE 可以是12245+12000=24245
()位置可以填+、-、*、\,問(wèn)你有多少種填法。
思路:
dfs,最多只由五種字母,我們就把每種字母都代表什么都試一遍,統(tǒng)計(jì)結(jié)果即可。
代碼:
#include<cstdio> #include<cstring> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<string> #include<queue> #include<vector> #include<map> #include<stack> #include<climits> #include<sstream> #include<algorithm>const int maxn=30;int a[maxn]; int b[maxn]; int c[maxn]; int num[maxn]; int vis1[maxn]; int vis2[maxn];char s[20]; int lena,lenb,lenc; void _make(int f) {int len=strlen(s); // printf("%d\n",len);if(f==1){memset(a,0,sizeof a);for(int i=0;i<len;i++){a[i]=s[i]-'A';vis1[a[i]]=1;lena=len;}lena--;}if(f==2){memset(b,0,sizeof b);for(int i=0;i<len;i++){b[i]=s[i]-'A';vis1[b[i]]=1;lenb=len;}lenb--;}if(f==3){memset(c,0,sizeof c);for(int i=0;i<len;i++){c[i]=s[i]-'A';vis1[c[i]]=1;lenc=len;}lenc--;}return ; }int check() {if(lena>0&&num[a[0]]==0)return 0;if(lenb>0&&num[b[0]]==0)return 0;if(lenc>0&&num[c[0]]==0)return 0;return 1; }int tx,ty,tz; void sovle() {for(int i=0;i<=lena;i++)tx=tx*10+num[a[i]];for(int i=0;i<=lenb;i++)ty=ty*10+num[b[i]];for(int i=0;i<=lenc;i++)tz=tz*10+num[c[i]]; }int _count() {if(!check())return 0;tx=0,ty=0,tz=0;sovle();int sum=0;if(tx+ty==tz){// printf("%d+%d=%d\n",tx,ty,tz);sum++;}if(tx-ty==tz){// printf("%d-%d=%d\n",tx,ty,tz);sum++;}if(tx*ty==tz){// printf("%d*%d=%d\n",tx,ty,tz);sum++;}if(ty!=0&&tz*ty==tx){// printf("%d/%d=%d\n",tx,ty,tz);sum++;}return sum; }int ans; void dfs(int x) {if(x==5){int flag=_count();if(flag)ans+=flag;return ;}if(vis1[x]){for(int i=0;i<=9;i++){if(!vis2[i]){vis2[i]=1;num[x]=i;dfs(x+1);vis2[i]=0;}}}elsedfs(x+1); }int main() {int t;scanf("%d",&t);while(t--){memset(vis1,0,sizeof vis1);for(int i=1;i<=3;i++){scanf("%s",s);_make(i);} // printf("%d %d %d\n",lena,lenb,lenc);memset(vis2,0,sizeof vis2);ans=0;dfs(0);printf("%d\n",ans);}return 0; }總結(jié)
以上是生活随笔為你收集整理的hdu3699(不等式dfs)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hdu3697(贪心+暴力)
- 下一篇: hdu5384(AC自动机+纪录重复单词