zoukankan      html  css  js  c++  java
  • TOJ 4976: 新生数(深搜)

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4976

    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

    描述

    我们定义十进制数中有6的为新生数。现在给你一些二进制数,叫你判断是不是新生数。当然这个太简单了,我们换种玩法,给你一个不完全的二进制数,其中有些数字是未知的用x表示,问,这个未知的二进制数最多可以有几种新生数的表示。

    输入

    输入有多组数据。

    每组一行,一个二进制数(长度不超过50,未知的数不超过20)。

    输出

    每行输出一个数,表示最多可以表示的总数。

    样例输入

    1xxxxx1111xx0xx
    1xx0x1x0x1x0x1x0x1x0x10

    样例输出

    179
    1408

    提示

    PS:放心没有前导0和x。


    思路:

    输入字符串,对字符串如果是'x' 则分 x为0或者x为1进行再次深搜。直到整个字符串都是01串(即不包含字符x的时候,return掉就行了)

    因为x最多是20,不用担心会爆栈。

    然后因为最多是50位,所以数字也不会超过__int64,不用大数

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<string>
    using namespace std;
    int su;
    bool judge(string s){
        for(int i = s.size() - 1 ; i >= 0; i--){
            if(s[i] == 'x')return false;
        }
        return true;
    }
    string s;
    bool check(__int64 ans){
        while(ans){
            int sum = ans % 10;
            if(sum == 6) return true;
            ans/=10;
        }
        return false;
    }
    void dfs(int i,__int64 sum,__int64 w){
        if(i == -1){
            if(check(sum))//check函数判断含不含6 
                su++;
            return;
        }
        if(s[i] == '0'){
            dfs(i-1,sum,w*2);
            return;
        }//sum 不加当前的数 
        else if(s[i] == '1'){
            dfs(i-1,sum+w,w*2);
            return;
        }//sum 加当前的数 
        else{
            dfs(i-1,sum+w,w*2);
            dfs(i-1,sum,w*2);
            //分两种情况递归下去
            return;
        }
    }
    int main()
    {
        while(cin>>s){
            su = 0;
            int len = s.size();dfs(len-1,0,1);
            printf("%d
    ",su);
        }
    }
  • 相关阅读:
    PHP线程安全和非线程安全有什么区别
    SHOW SLAVE STATUS 详解
    linux 2>&1
    crontab 例行性排程
    clang-format 数组初始化,多行模式
    windows 10 1909 无法启用 .NET Framework 解决
    SysCtlDelay 实现延时
    wpa_supplicant 检测错误密码
    swig python dynamic module does not define init function
    讯飞错误码10116
  • 原文地址:https://www.cnblogs.com/Esquecer/p/8548688.html
Copyright © 2011-2022 走看看