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)