hdu4734 F(x)
Posted achensy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu4734 F(x)相关的知识,希望对你有一定的参考价值。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int maxn=1e5+5; 6 int tot,e[15]; 7 int c[15][maxn]; 8 int t,a,b,cas; 9 template<class t>void red(t &x) 10 11 int w=1; 12 x=0; 13 char ch=getchar(); 14 while(ch>‘9‘||ch<‘0‘) 15 16 if(ch==‘-‘) 17 w=-1; 18 ch=getchar(); 19 20 while(ch>=‘0‘&&ch<=‘9‘) 21 22 x=(x<<3)+(x<<1)+ch-‘0‘; 23 ch=getchar(); 24 25 x*=w; 26 27 void input() 28 29 freopen("input.txt","r",stdin); 30 //freopen("output.txt","w",stdout); 31 32 void dv(int x) 33 34 tot=0; 35 while(x) 36 37 e[++tot]=x%10; 38 x/=10; 39 40 e[tot+1]=0; 41 42 int dfs(int pos,bool limit,int sum) 43 44 if(!pos) 45 return sum>=0; 46 if(sum<0) 47 return 0; 48 if(!limit&&c[pos][sum]!=-1) 49 return c[pos][sum]; 50 int up=limit?e[pos]:9; 51 int ans=0; 52 for(int i=0;i<=up;++i) 53 ans+=dfs(pos-1,limit&&(i==up),sum-i*(1<<(pos-1))); 54 if(!limit) 55 c[pos][sum]=ans; 56 return ans; 57 58 int f(int x) 59 60 int ans=0,i=0; 61 while(x) 62 63 ans+=(1<<(i))*(x%10); 64 x/=10; 65 ++i; 66 67 return ans; 68 69 int solve() 70 71 //memset(c,-1,sizeof(c)); 72 dv(b); 73 return dfs(tot,1,f(a)); 74 75 int main() 76 77 //input(); 78 red(t); 79 memset(c,-1,sizeof(c)); 80 while(t--) 81 82 red(a); 83 red(b); 84 printf("Case #%d: %d\n",++cas,solve()); 85 86 return 0; 87
以上是关于hdu4734 F(x)的主要内容,如果未能解决你的问题,请参考以下文章