首页 > 代码库 > hdu 3555 Bomb

hdu 3555 Bomb

http://acm.hdu.edu.cn/showproblem.php?pid=3555

 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define ll __int64 5 using namespace std; 6  7 ll dp[30][3]; 8 int num[30]; 9 10 void inti()11 {12     memset(dp,0,sizeof(dp));13     dp[0][0]=1;14     dp[0][1]=0;15     dp[0][2]=0;16     for(int i=1; i<30; i++)17     {18         dp[i][0]=dp[i-1][0]*10-dp[i-1][1];19         dp[i][1]=dp[i-1][0];20         dp[i][2]=dp[i-1][2]*10+dp[i-1][1];21     }22 }23 24 int main()25 {26     int t;27     scanf("%d",&t);28     inti();29     while(t--)30     {31         ll n;32         scanf("%I64d",&n);33         int cnt=0;34         while(n)35         {36             num[++cnt]=n%10;37             n=n/10;38         }39         num[cnt+1]=0;40         bool flag=false;41         ll ans=0;42         for(int i=cnt; i>=1; i--)43         {44              ans+=dp[i-1][2]*num[i];45              if(flag) ans+=dp[i-1][0]*num[i];46              else if(!flag&&num[i]>4)47              {48                  ans+=dp[i-1][1];49              }50              if(num[i+1]==4&&num[i]==9)51              {52                  flag=true;53              }54         }55         if(flag) ans++;56         printf("%I64d\n",ans);57     }58     return 0;59 }
View Code

 

hdu 3555 Bomb