zoukankan      html  css  js  c++  java
  • JZ高中OJ 1039. [SCOI2009]windy数

    Description

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

    Input

    两个整数,A B。

    Output

    一个整数,表示A~B中有多少个windy数。
     

    Sample Input

    1 10

    Sample Output

    9
     

    Data Constraint

     
     

    Hint

    100%的数据,满足 1 <= A <= B <= 2000000000 。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int num[11],dp[11][11];
     4 inline int read()
     5 {
     6   char ch=getchar();int num=0;
     7   while(ch<'0'||ch>'9')ch=getchar();
     8   while(ch>='0'&&ch<='9'){
     9     num=num*10+ch-'0';ch=getchar();}
    10   return num;
    11 }
    12 inline int Abs(int x)
    13 {
    14   return x>0?x:-x;
    15 }
    16 inline int dfs(int len,int las,bool top,bool zero)
    17 {
    18   if(len==0)return 1;
    19   if(!top&&!zero&&dp[len][las]!=-1)
    20     return dp[len][las];
    21   int cnt=0,maxx=(top?num[len]:9);
    22   for(int i=0;i<=maxx;i++){
    23     if(Abs(i-las)<2)continue;
    24     int p=i;if(zero&&i==0)p=-555;
    25     cnt+=dfs(len-1,p,top&&(i==maxx),(p==-555));
    26   }
    27   if(!zero&&!top)
    28       dp[len][las]=cnt;
    29   return cnt;
    30 }
    31 inline int work(int x)
    32 {
    33   int tot=0;
    34   while(x){
    35       num[++tot]=x%10;
    36     x/=10;
    37     }
    38   memset(dp,-1,sizeof(dp));
    39   return dfs(tot,-555,true,true);
    40 }
    41 int main()
    42 {
    43   int x=read();
    44   int y=read();
    45   printf("%d",work(y)-work(x-1));
    46   return 0;
    47 }
  • 相关阅读:
    MongoDB 连接
    MongoDB 概念解析
    Linux平台安装MongoDB
    window平台安装MongoDB
    MongoDB 简介
    NoSQL 简介
    Docker有用的资源
    Docker常见仓库Redis
    Docker常见仓库MongoDB
    微信小程序
  • 原文地址:https://www.cnblogs.com/dsanying/p/11329231.html
Copyright © 2011-2022 走看看