zoukankan      html  css  js  c++  java
  • 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一下

  • 相关阅读:
    mac安装sublime text 3,含注册码
    shell脚本--cut命令与awk简单使用
    mac安装VMware虚拟机(含序列号)及Ubuntu系统
    伪静态与重定向--RewriteBase
    伪静态与重定向--RewriteRule
    伪静态与重定向之初体验
    shell脚本--内容查找之grep命令
    shell脚本--文件查找之find命令
    JQuery基础-- Ajax
    安装phpredis扩展
  • 原文地址:https://www.cnblogs.com/XXrll/p/10303415.html
Copyright © 2011-2022 走看看