zoukankan      html  css  js  c++  java
  • 【习题 7-8 UVA-12107】Digit Puzzle

    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    迭代加深搜索。 枚举最大层数。(也即改变的数字个数 然后枚举第一个改哪个数字,第二个改哪个数字。。 一定要注意字典序问题。 每次优先改成较小的字典序(也即顺序枚举 然后注意这个字符不改的情况。 不要算改变数。 最后改完之后。 只需要枚举a和b的情况。 看看a*b是不是等于c就好 ->查看这样的a*b数量是不是1 如果是1的话.就说明是正确的。直接输出那个ans就好(我们已经是从小到大枚举了,找到的一定是答案

    【代码】

    /*
      	1.Shoud it use long long ?
      	2.Have you ever test several sample(at least therr) yourself?
      	3.Can you promise that the solution is right? At least,the main ideal
      	4.use the puts("") or putchar() or printf and such things?
      	5.init the used array or any value?
      	6.use error MAX_VALUE?
      	7.use scanf instead of cin/cout?
      	8.whatch out the detail input require
    */
    /*
        一定在这里写完思路再敲代码!!!
    */
    #include <bits/stdc++.h>
    using namespace std;
    
    string x,y,z,s,ans;
    int belong[10];
    int maxdep,lenx,leny,lenz,tot;
    
    string inttostring(int x){
        string s = "";
        while (x > 0){
            s = (char)(x%10+'0')+ s;
            x/=10;
        }
        return s;
    }
    
    int stringtoint(string s){
        int x = 0;
        int len = s.size();
        for (int i = 0;i < len;i++){
            x = x *10 + s[i]-'0';
        }
        return x;
    }
    
    void ok(int dep){
        if (tot>1) return;
        if (dep==lenx+leny){
            string v[3];
            for (int i = 0;i < 3;i++) v[i]="";
            for (int i = 0;i < lenx+leny+lenz;i++) v[belong[i]]+=s[i];
            int tx = stringtoint(v[0]),ty = stringtoint(v[1]);
            tx = tx*ty;
            string tz = inttostring(tx);
            if ((int)tz.size()!=(int)v[2].size()) return;
            for (int i = 0;i < (int) v[2].size();i++)
                if (tz[i]!=v[2][i] && v[2][i]!='*') return;
            tot++;
            return;
        }
        if (s[dep]=='*'){
            int qidian = 0;
            if (dep==0 || dep == lenx || dep==lenx+leny) qidian = 1;
            for (int i = qidian;i <= 9;i++){
                s[dep] = i+'0';
                ok(dep+1);
                s[dep] = '*';
            }
        }else ok(dep+1);
    }
    
    bool dfs1(int dep,int nex){
        if (dep==maxdep){
            tot = 0;
            string tans = s;
            ok(0);
            if(tot==1) {
                ans = s;
                return true;
            }
            return false;
        }
        if (nex>=lenx+leny+lenz) return false;
        char temp;
    
        temp = s[nex];
        s[nex] = '*';
        int cnt = 1;
        if (s[nex]==temp) cnt = 0;
        if (dfs1(dep+cnt,nex+1)) return true;
        s[nex] = temp;
    
    
        int qidian = 0;
        if (nex==0 || nex == lenx || nex == lenx+leny) qidian = 1;
        for (int i = qidian;i <= 9;i++){
            temp = s[nex];
            s[nex] = i+'0';
            int cnt = 1;
            if (s[nex]==temp) cnt = 0;
            if (dfs1(dep+cnt,nex+1)) return true;
            s[nex] = temp;
        }
    
        return false;
    }
    
    int main(){
    	#ifdef LOCAL_DEFINE
    	    freopen("rush_in.txt", "r", stdin);
    	#endif
    	ios::sync_with_stdio(0),cin.tie(0);
    	int kase = 0;
        while (cin >> x && x[0]!='0'){
            ans.clear();
            cin >> y >> z;
            lenx = x.size(),leny = y.size(),lenz = z.size();
            s = x + y + z;
            for (int i = 0;i < lenx;i++) belong[i] = 0;
            for (int i = lenx;i < lenx+leny;i++) belong[i] = 1;
            for (int i = lenx+leny;i < lenx+leny+lenz;i++) belong[i] = 2;
    
            for (maxdep = 0;;maxdep++)
                if (dfs1(0,0)) break;
    
            cout <<"Case "<<++kase<<": ";
            for (int i = 0;i < lenx;i++) cout << ans[i];cout <<' ';
            for (int i = lenx;i < lenx+leny;i++) cout << ans[i];cout <<' ';
            for (int i = lenx+leny;i < lenx+leny+lenz;i++) cout << ans[i];
            cout << endl;
        }
    	return 0;
    }
    
    
  • 相关阅读:
    SpringBoot 之基础学习篇.
    Java 反射机制
    第二十二节,TensorFlow中的图片分类模型库slim的使用、数据集处理
    第二十一节,条件变分自编码
    第二十节,变分自编码
    第十九节,去噪自编码和栈式自编码
    使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)
    第十八节,自编码网络介绍及代码实现
    第十七节,受限玻尔兹曼机网络及代码实现
    第二十二节,TensorFlow中RNN实现一些其它知识补充
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8166417.html
Copyright © 2011-2022 走看看