日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu3699(不等式dfs)

發布時間:2025/3/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu3699(不等式dfs) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

給出三個串,只由A~E組成,每個串的長度最長是8,字符相同代表那個位置的數字相同,數字可以是0~9,例如:

ABBDE() ABCCC=BDBDE 可以是12245+12000=24245

()位置可以填+、-、*、\,問你有多少種填法。


思路:

dfs,最多只由五種字母,我們就把每種字母都代表什么都試一遍,統計結果即可。


代碼:

#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; }

總結

以上是生活随笔為你收集整理的hdu3699(不等式dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。