HDU 3555 Bomb (数位DP)
2016-03-22 13:04
330 查看
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
Sample Output
求含49的个数:
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 HintFrom 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.
求含49的个数:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; //ll dp[22][0]; //含有49 //ll dp[22][1]; //不含49且最高位为9 //ll dp[22][2]; //不含49 ll dp[22][3]; int bits[22]; void init() { int i,j; dp[0][2]=1; for(i=1;i<=20;i++) { dp[i][0]=dp[i-1][0]*10+dp[i-1][1]; dp[i][1]=dp[i-1][2]; dp[i][2]=dp[i-1][2]*10-dp[i-1][1]; } } ll work(ll n) { int i,j,len=0; bool flag=false; ll ans=0; while(n) { bits[++len]=n%10; n=n/10; } bits[len+1]=0; for(i=len;i;i--) { ans+=bits[i]*dp[i-1][0]; if(flag) ans+=bits[i]*dp[i-1][2]; if(!flag&&bits[i]>4) ans+=dp[i-1][1]; if(bits[i]==9&&bits[i+1]==4) flag=true; } return ans; } int main() { int t,i,j; ll n; cin>>t; init(); while(t--) { cin>>n; cout<<work(n+1)<<endl; } return 0; }
相关文章推荐
- Tuning Windows Server 2008 for PHP
- hdoj2647Reward《《拓(tuo)扑》》
- iOS 原生二维码扫描crush([AVCaptureMetadataOutput setMetadataObjectTypes:] - unsupported type found. Use -)
- 网易笔试编程题-java版
- VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
- 黑马程序员--多线程
- 训练深度神经网络的时候需要注意的一些小技巧
- Python多维数组和矩阵
- Activity的生命周期
- QEMU调试Linux系统的USB协议栈
- MS SQL查询所有表行数,获取所有数据库名,表名,字段名
- 互联网架构设计之Redis篇-【Redis Windows版本安装过程】
- 【HDU 1846】Brave Game(巴什博弈)
- 优化网页速度的7种方法
- 蓝桥杯 算法训练 区间k大数查询
- 链表的简单创建——C程序设计
- 第三方 融云集成下
- Http协议和Https协议的区别
- 动态修改 drawableTop
- [mark] 使用Sublime Text 2时如何将Tab配置为4个空格