亞洲區域賽的題,簡單的數位DP題,注重細節。
任何細節都有可能導致wa,所以沒有絕對的水題。
把握好細節,此題便A。
#include<stdio.h> __int64 getans(__int64 s) { __int64 ans=0,tmp=1000000000;//這裡最大只能取10^9,取10^10就ce了 if(s==0)return 0;//0單獨考慮 while(s<tmp) tmp/=10; while(s) { __int64 p=s/tmp,num; if(p>=4)//不是最後一位可以取0,1,2,3四個值,之前只考慮了0,1,2三個值,好傷。。。。。 { num=1; while(s) { num*=4; s/=10; } ans+=num/4*3;//最後一位只能取0,1,2, } else { __int64 h=s; num=p; h/=10; if(h==0)//最後一位 ans+=num; else//不是最後一位 { while(h) { num*=4; h/=10; } ans+=num/4*3; } } s%=tmp; tmp/=10; } return ans; } int main() { __int64 n; while(scanf("%I64d",&n)!=-1) printf("%I64d\n",getans(n)); return 0; }