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
- hdu2140
- 为什么很多类甚者底层源码要implements Serializable ?
- 阿里云目录与文件的权限问题
- RelativeLayout常用属性介绍
- 如何在cmd中注册DLL和OCX控件
- MyEclipse提示“错误: 找不到或无法加载主类”
- hdu2140
- 机房收费系统初想
- 高压电磁流量计的详细介绍及特点
- 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?
- cocos2d-x 3.2 物理碰撞机制
- ThreadLocal的奥秘
- codeforces 295B Greg and Graph
- Altium Designer 10常见问题及解决方法
- 使用window.navigator.userAgent属性判断浏览器类型及版本