• Classy Numbers


    http://codeforces.com/group/w1oiqifZbS/contest/1036/problem/C

    ①先查找,存入vector(dfs)-->排序(sort)-->二分(lower_bound,upper_bound)

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<stdlib.h>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<string>
    10 #include<set>
    11 #include<cctype>
    12 #include<sstream>
    13 #define mem(a) memset(a,0,sizeof(a))
    14 #define LL long long
    15 using namespace std;
    16 const int N=1e6+5;
    17 vector<LL> ve;
    18 LL n,l,r,m;
    19 void dfs(LL now,int sum,int len)
    20 {
    21     ve.push_back(now);
    22     if(len==18)return;
    23     dfs(now*10,sum,len+1); //十的倍数
    24     if(sum<3)
    25     {
    26        for(int i=1;i<=9;i++)
    27         dfs(now*10+i,sum+1,len+1);//其他,加一---非零
    28     }
    29 }
    30 int main()
    31 {
    32     for(int i=1;i<=9;i++) //找到符合条件的数
    33         dfs(i,1,1);
    34     ve.push_back(1e18);//范围,不超过,且1e18符合
    35     sort(ve.begin(),ve.end()); //lo,up要先排序
    36     int t;
    37     scanf("%d",&t);
    38     while(t--)
    39     {
    40         scanf("%I64d%I64d",&l,&r);
    41         /*二分查找*/
    42         int L=lower_bound(ve.begin(),ve.end(),l)-ve.begin();//返回第一个大于等于元素的下标
    43         int R=upper_bound(ve.begin(),ve.end(),r)-ve.begin();//返回第一个大于的元素的下标;
    44         printf("%d
    ",R-L); //因为是up-lo,所以不用+1,且两个都是lo的话+1会在lr相等时出错
    45     }
    46     return 0;
    47 }
    View Code

    ②查到发现还可以用数位DP mark一下

  • 相关阅读:
    在Win10中通过命令行打开UWP应用
    前端学习Docker
    Puppeteer的使用
    taro教程
    22种开源Vue模板和主题框架「干货」
    36种免费React模板和主题「干货」
    移动端1px显示异常解决方案
    前端性能优化(二)
    Vue.set()和this.$set()源码解析
    2018年8月7日 乐视2 X621 刷机包下载链接
  • 原文地址:https://www.cnblogs.com/XXrll/p/10303415.html
Copyright © 2020-2023  润新知