「hdu3555」Bomb

2014年12月12日3,4630
Problem Description
The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence “49”, the power of the blast would add one point.
Now the counter-terrorist knows the number N. They want to know the final points of the power. Can you help them?

 

Input
The first line of input consists of an integer T (1 <= T <= 10000), indicating the number of test cases. For each test case, there will be an integer N (1 <= N <= 2^63-1) as the description.
The input terminates by end of file marker.
Output
For each test case, output an integer indicating the final points of the power.
Sample Input
3 1 50 500
Sample Output
0 1 15

Hint

From 1 to 500, the numbers that include the sub-sequence “49” are “49”,”149″,”249″,”349″,”449″,”490″,”491″,”492″,”493″,”494″,”495″,”496″,”497″,”498″,”499″, so the answer is 15.

题解
复习数位dp。。。
好像我的写法和网上都不太一样
预处理f[i][j]表示长度为i开头为j的不满足条件的数字个数
ans=n-dp(n)
然后就可以dp了。。。诶好像是废话
顺便说下dp过程
比如78915 L=5
首先算出 1-9999
for(int i=1;i<L;i++)
for(int j=1;j<=9;j++)
ans+=f[i][j];
然后是10000-69999
for(int i=1;i<cur;i++)ans+=f[L][i];
现在限定第一位为7,算70000-77999
。。。。第二位位8,算78000-78899
以此类推

 

avatar
  Subscribe  
提醒