hdu2140

来源:互联网 发布:ubuntu 15 安装教程 编辑:程序博客网 时间:2024/06/08 04:17
蒟蒻的自我拯救。。。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;char st[100],st2[100];int sum[100],len1,len2,ans;int pow(int num){int tmp=1;for(int i=1;i<=num;i++){tmp*=10;}return tmp;}bool judge(){    int num1,num2;    num1=0;num2=0;    for(int i=1;i<=len1;i++)    {        if(st[i]!='?')num1=num1*10+st[i]-'0';        else num1=num1*10+9;        num2=num2*10+st2[i]-'0';    }    if(num1<=num2)return false;    return true;}int check(int pos){    for(int i=1;i<=pos;i++)    {        if(st[i]==st2[i]) continue;        if(st[i]<st2[i]){return -1;}        if(st[i]>st2[i]){return 1;}    }    return 0;}int dfs(int pos){    if(pos>len1)        return 0;    int tmp=0;    if(check(pos)==1)    {        return pow(sum[len1]-sum[pos]);    }    if(check(pos)==-1)    {        return 0;    }    if(st[pos+1]=='?')    {        for(int i=9;i>=0;i--)        {            st[pos+1]=i+'0';            tmp+=dfs(pos+1);        }    }    else tmp=dfs(pos+1);    return tmp;}int main(){    while(scanf("%s",st+1))    {        memset(sum,0,sizeof(sum));        ans=1;        if(st[1]=='#')            break;        scanf("%s",st2+1);        len1=strlen(st+1);        len2=strlen(st2+1);        for(int i=1;i<=len1;i++)        {            sum[i]=sum[i-1];            if(st[i]=='?')            {                sum[i]++;            }        }        if(len1>len2)        {            ans=pow(sum[len1]-1);            if(st[1]=='?')            {                ans*=9;            }            else                ans*=10;            printf("%d\n",ans);            continue;        }        if(len1<len2)        {            printf("0\n");            continue;        }        if(!judge())        {            printf("0\n");            continue;        }        ans=dfs(0);        printf("%d\n",ans);    }    return 0;}

0 0