zoukankan      html  css  js  c++  java
  • [暑假集训--数位dp]hdu3555 Bomb

    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,找子序列‘49’

    记一下有没有出现过'4',是否已经出现过"49"

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<queue>
     8 #include<deque>
     9 #include<set>
    10 #include<map>
    11 #include<ctime>
    12 #define LL long long
    13 #define inf 0x7ffffff
    14 #define pa pair<int,int>
    15 #define mkp(a,b) make_pair(a,b)
    16 #define pi 3.1415926535897932384626433832795028841971
    17 using namespace std;
    18 inline LL read()
    19 {
    20     LL x=0,f=1;char ch=getchar();
    21     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    22     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    23     return x*f;
    24 }
    25 LL n,len;
    26 LL f[63][10][2];
    27 int d[63];
    28 inline LL dfs(int now,int dat,int sat,int fp)
    29 {
    30     if (now==1)return sat;
    31     if (!fp&&f[now][dat][sat]!=-1)return f[now][dat][sat];
    32     LL ans=0,mx=(fp?d[now-1]:9);
    33     for (int i=0;i<=mx;i++)
    34     {
    35         if (sat||!sat&&dat==4&&i==9)ans+=dfs(now-1,i,1,fp&&mx==i);
    36         else ans+=dfs(now-1,i,0,fp&&mx==i);
    37     }
    38     if (!fp&&f[now][dat][sat]==-1)f[now][dat][sat]=ans;
    39     return ans;
    40 }
    41 inline LL calc(LL x)
    42 {
    43     LL xxx=x;
    44     len=0;
    45     while (xxx)
    46     {
    47         d[++len]=xxx%10;
    48         xxx/=10;
    49     }
    50     LL sum=0;
    51     for (int i=0;i<=d[len];i++)
    52     sum+=dfs(len,i,0,i==d[len]);
    53     return sum;
    54 }
    55 int main()
    56 {
    57     memset(f,-1,sizeof(f));
    58     int T=read();
    59     while (T--)n=read(),printf("%lld
    ",calc(n));
    60 }
    hdu 3555
  • 相关阅读:
    Python 批量修改图片格式和尺寸
    c++ placement new概念
    xcopy
    STL List::sort() 解析
    程序猿的骄傲,以及骄傲背后真实的原因。
    误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
    【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
    程序员面经:面试前到底该不该刷题以及面试前该如何准备
    送给即将毕业的同学,谈谈毕业后第一份工作和追女生的问题。
    一个最新发现,原来程序员的最终归宿在这里。
  • 原文地址:https://www.cnblogs.com/zhber/p/7284051.html
Copyright © 2011-2022 走看看