zoukankan      html  css  js  c++  java
  • [bzoj1026][SCOI2009]windy数

    1026: [SCOI2009]windy数

    Time Limit: 1 Sec Memory Limit: 162 MB
    Submit: 4002 Solved: 1788
    [Submit][Status][Discuss]
    Description

    windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间。包括A和B。总共同拥有多少个windy数?

    Input

    包括两个整数,A B。

    Output

    一个整数。

    Sample Input

    【输入例子一】

    1 10

    【输入例子二】

    25 50
    Sample Output

    【输出例子一】

    9

    【输出例子二】

    20
    HINT

    【数据规模和约定】

    100%的数据,满足 1 <= A <= B <= 2000000000 。

    数位dp的水题。

    f[i][j]表示i位数最高位为j时的windy数的个数。
    那么我们计算1~x的windy数的个数的时候,如果x是个n位数,那么我们先用f数组计算出全部n-1位数的答案。然后计算第n位的时候枚举符合条件的n位,n-1位,以此类推。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int l,r,f[11][10];
    int abs(int x){return x>0?x:-x;}
    int work(int x)
    {
        int y=x,ans=0,now[11],pre,i,j;
        now[0]=0;
        while(y){now[++now[0]]=y%10;y/=10;}
        for(i=1;i<now[0];++i)
          for(j=1;j<=9;++j)
            ans+=f[i][j];
        for(i=1;i<=now[now[0]]-1;++i) ans+=f[now[0]][i];
        pre=now[now[0]];
        for(i=now[0]-1;i>0;--i){
            if(i==1&&abs(now[i]-pre)>=2) ans+=1;
            for(j=0;j<=min(pre-2,now[i]-1);++j) ans+=f[i][j];
            for(j=pre+2;j<=now[i]-1;++j) ans+=f[i][j];
            if(abs(pre-now[i])<2) break;
            pre=now[i];
        }
        return ans;
    }
    int main()
    {
        int i,j,k;
        scanf("%d%d",&l,&r);
        for(i=0;i<=9;++i) f[1][i]=1;
        for(i=2;i<=10;++i)
          for(j=0;j<=9;++j){
            if(i==10&&j==2) break;
            for(k=0;k<=9;++k)
              if(abs(j-k)>=2)
                f[i][j]+=f[i-1][k];
          }
        printf("%d
    ",work(r)-work(l-1));
    }
  • 相关阅读:
    进程、线程、处理器间的关系研究(未完待续)
    Java运行原理研究(未完待续)
    libuv的多线程之间传递消息
    C++对象与其第一个非静态成员地址相同
    libuv移植到android
    pthread在Qt+Windows下的使用
    libuv在mingw下编译
    libxml2在mingw下编译
    libcurl在mingw下编译
    string的内存本质
  • 原文地址:https://www.cnblogs.com/llguanli/p/7293983.html
Copyright © 2011-2022 走看看