• CDOJ1085 基爷与加法等式 爆搜DFS


    题目链接:

    http://acm.uestc.edu.cn/#/problem/show/1085

    题意:

    题解:

    因为进位,从低位搜
    

    代码:

    http://www.cnblogs.com/qscqesze/p/4489781.html

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 #define MS(a) memset(a,0,sizeof(a))
      5 #define MP make_pair
      6 #define PB push_back
      7 const int INF = 0x3f3f3f3f;
      8 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
      9 inline ll read(){
     10     ll x=0,f=1;char ch=getchar();
     11     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     12     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
     13     return x*f;
     14 }
     15 //////////////////////////////////////////////////////////////////////////
     16 const int maxn = 1e5+10;
     17 
     18 int n,ma,tmp,ans;
     19 string s[30];
     20 char k[100];
     21 int tp[30],ans1[30],ans2[30],H[30],mp[30],vis[10];
     22 
     23 bool check(){
     24     ans1[ma] = 0;
     25     for(int i=ma-1; i>=0; i--){
     26         ans1[i] = 0;
     27         ans2[i] = 0;
     28         for(int j=0; j<n-1; j++){
     29             if(H[s[j][i]-'A'] == -1) return 0;
     30             ans1[i] += H[s[j][i]-'A'];
     31         }
     32         if(H[s[n-1][i]-'A'] == -1) return 0;
     33         ans2[i] = H[s[n-1][i]-'A'];
     34         ans1[i] += (ans1[i+1]/10);
     35         if((ans1[i])%10 != ans2[i]) return 1;
     36     }
     37 
     38     if(ans1[0] > 9) return 1;
     39     return 0;
     40 }
     41 
     42 void dfs(int x){
     43     if(x==tmp) {
     44         ans++;
     45         return ;
     46     }
     47 
     48     for(int i=0; i<=9; i++){
     49         if(i==0 && tp[k[x]-'A']) continue;
     50         if(vis[i]) continue;
     51         vis[i] = 1;
     52         H[k[x]-'A'] = i;
     53         if(!check()) dfs(x+1);
     54         H[k[x]-'A'] = -1;
     55         vis[i] = 0;
     56     }
     57 
     58 }
     59 
     60 int main(){
     61     while(cin >> n){
     62         for(int i=0;i<30;i++)
     63             mp[i]=tp[i]=H[i]=0;
     64         ma=0;
     65         for(int i=0; i<n; i++){
     66             cin >> s[i];
     67             ma = max(ma,(int)s[i].size());
     68         }
     69 
     70         for(int i=0; i<n; i++)
     71             tp[s[i][0]-'A'] = 1;
     72 
     73         for(int i=0; i<n; i++){
     74             int len = ma-s[i].size();
     75             for(int j=0; j<len; j++){
     76                 s[i] = '[' + s[i];
     77             }
     78         }
     79 
     80         tmp=0;
     81         ans=0;
     82         for(int i=ma-1;i>=0;i--){
     83             for(int j=0;j<n;j++){
     84                 if(mp[s[j][i]-'A']) continue;
     85                 if(s[j][i]=='[') continue;
     86                 k[tmp++]=s[j][i];
     87                 mp[s[j][i]-'A']=1;
     88             }
     89         }
     90 
     91         for(int i=0; i<tmp; i++)
     92             H[k[i]-'A'] = -1;
     93 
     94         // H['['-'A'] = 0;
     95         dfs(0);
     96 
     97         cout << ans << endl;
     98     }
     99 
    100     return 0;
    101 }
  • 相关阅读:
    CentOS7 FTP安装与配置
    EF CodeFirst 数据库的操作
    CentOS7 防火墙(firewall)的操作命令
    小程序学习(四)小程序逻辑层之注册页面
    小程序学习(三)小程序逻辑层的注册程序和场景值
    小程序学习(二)基本结构与文件的类型
    VS2015 无法启动IIS Express Web服务器(已解决)
    django 2.接口之工作原理
    django 1.开发接口环境搭建
    pytest 15 fixture之autouse=True
  • 原文地址:https://www.cnblogs.com/yxg123123/p/6827690.html
Copyright © 2020-2023  润新知