C. Classy Numbers】的更多相关文章

C. Classy Numbers 题目链接:https://codeforces.com/contest/1036/problem/C 题意: 给出n个询问,每个询问给出Li,Ri,问在这个闭区间中有多少个数满足,除开0之外,最多只有4个数字. 题解: 由于题目给出的数满足前缀性质,所以我们可以直接求[1,r]这个区间中有多少个数满足就好了. 具体做法就是从高位往低位来看,然后如果当前数组不为0,假设为p,那么当前数组对答案的贡献就比较好计算了,假设后面的数有x位,目前已经有k个数字了. 那么…
Classy Numbers time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Let's call some positive integer classy if its decimal representation contains no more than 33 non-zero digits. For example,…
<题目链接> 题目大意: 对于那些各个位数上的非0数小于等于3的数,我们称为 classy number ,现在给你一个闭区间 [L,R]  (1≤L≤R≤1018).,问你这个区间内有多少个classy number 数. 解题分析: 对于这种对数的数位有要求的题目,可以往搜索,dp上想一想,本题可用搜索做.先用搜索将所有符合条件的数放入vector ,然后排序,再用二分函数得到 L,R的坐标,再相减,即可得到 [L,R]区间中满足条件的数的个数. #include <bits/std…
http://codeforces.com/group/w1oiqifZbS/contest/1036/problem/C ①先查找,存入vector(dfs)-->排序(sort)-->二分(lower_bound,upper_bound) #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<stdlib.h> #incl…
链接 [http://codeforces.com/contest/1036/problem/C] 题意 给你l,r,让你找在这个闭区间内位数不为0不超过3的个数,1<=l,r<=1e18 分析 用一个dfs函数递归把1到1e18所有满足条件的放到一个vector里 然后对于每个查找区间,用upper_bound(ve.begin(),ve.end(),r)-lower_bound(ve.begin(),ve.end(),l)就是答案了 需要注意的是保存1e18这个数因为它是19位数 代码 #…
题目大意:多个询问,每个询问问$[l,r](1\leqslant l\leqslant r\leqslant10^{18})$内有多少个数满足非零数位小于等于$3$. 题解:数位$DP$,$f_{i,j}$表示在第$i$位,有$j$个数位不是$0$的方案数 卡点:无 C++ Code: #include <cstdio> #include <cstring> int Tim, num[20]; long long M[5][20]; long long run(int x, int…
[链接] 我是链接,点我呀:) [题意] 让你求出只由3个非0数字组成的数字在[li,ri]这个区间里面有多少个. [题解] 只由3个非0数字组成的数字在1~10^18中只有60W个 dfs处理出来之后排序做个二分查找一下区间里有多少个就好. [代码] import java.io.*; import java.util.*; public class Main { static InputReader in; static PrintWriter out; public static void…
因为cf上一堆水题,每个单独开一篇博客感觉不太好,就直接放一起好了. CF1096D Easy Problem 给定字符串,每个位置删除要代价.求最小代价使之不含子序列"hard". 设f[i][f]表示前i个删到只匹配f位子序列的最小代价.转移看代码吧.O(n) #include <bits/stdc++.h> typedef long long LL; ; int a[N]; LL f[N][]; char str[N]; int main() { int n; sca…
1036A - Function Height    20180907 \(ans=\left \lceil \frac{k}{n} \right \rceil\) #include<bits/stdc++.h> using namespace std; #define LL long long LL n,k; int main() { scanf("%I64d%I64d",&n,&k); printf()/n+); ; } 1036B - Diagonal…
T1 中位数(二分) 这个题是一个二分(听说是上周atcoder beginner contest的D题???) 我们可以开一个数组b存a,sort然后二分b进行check(从后往前直接遍历check时间复杂度不太对),check的时候把大于等于当前值的设为1,小于当前值的设为-1,然后题目就变成了查询是否有区间的值大于零(因为和它相同的我们也设为了1). 查询的时候维护一个前缀最小值. #include <iostream> #include <cstdio> #include…