当前位置:网站首页>CF1036C Classy Numbers 题解
CF1036C Classy Numbers 题解
2022-07-06 07:23:00 【q779】
CF1036C Classy Numbers 题解
题意:定义一个数字是“好数”,当且仅当它的十进制表示下有不超过 3 3 3个数字 1 ∼ 9 1 \sim 9 1∼9
举个例子: 4 , 200000 , 10203 4,200000,10203 4,200000,10203是“好数”,然而 4231 , 102306 , 7277420000 4231,102306,7277420000 4231,102306,7277420000不是
给定 [ l , r ] [l,r] [l,r],问有多少个 x x x使得 l ≤ x ≤ r l \le x \le r l≤x≤r,且 x x x是“好数”
一共有 T ( 1 ≤ T ≤ 1 0 4 ) T(1 \le T \le 10^{4}) T(1≤T≤104)组数据,对于每次的询问,输出一行一个整数表示答案
1 ≤ l i ≤ r i ≤ 1 0 18 1 \le l_i \le r_i \le 10^{18} 1≤li≤ri≤1018
一般数位dp可以用来解决 ∑ i = l r f ( i ) \sum _{i=l}^{r} f(i) ∑i=lrf(i) 的问题,
其中 f ( i ) f(i) f(i) 为与 i i i 的数位有关的某个函数或判定式
这题稍微变形了一下,那我们就理所当然地记录一下出现数字的情况
设 f i , j f_{i,j} fi,j 表示满 i i i 位数,有 j j j 个非 0 0 0 位
采用记忆化搜索,详见代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)()
int num[25],f[25][5];
// u表示当前位数,st表示当前的j,limit表示是否有高位限制
int dfs(int u,int st,bool limit)
{
if(!u)return 1;
if(!limit&&f[u][st]!=INF)
return f[u][st]; // 记忆化
int up=limit?num[u]:9,ans=0;
for(int i=0; i<=up; i++)
{
if(!i)ans+=dfs(u-1,st,limit&&num[u]==i);
else if(st!=3)ans+=dfs(u-1,st+1,limit&&num[u]==i);
}
if(!limit) f[u][st]=ans; // 只需记录无高位限制的
return ans;
}
int solve(int x)
{
int len=0;
while(x>0)
{
num[++len]=x%10;
x/=10;
}
return dfs(len,0,1);
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// freopen("check.in","r",stdin);
// freopen("check.out","w",stdout);
memset(f,0x3f,sizeof(f));
int Q;cin >> Q;
while(Q--)
{
int l,r;
cin >> l >> r;
cout << solve(r)-solve(l-1) << '\n';
}
return 0;
}
参考文献
[1] https://www.luogu.com.cn/blog/rated/solution-cf1036c
转载请说明出处
边栏推荐
猜你喜欢
杰理之蓝牙设备想要发送数据给手机,需要手机先打开 notify 通道【篇】
How Navicat imports MySQL scripts
微信公众号无限回调授权系统源码 全网首发
杰理之AD 系列 MIDI 功能说明【篇】
【mysql学习笔记30】锁(非教程)
Win10 64 bit Mitsubishi PLC software appears oleaut32 DLL access denied
Bugku CTF daily question: do you want seeds? Blackmailed
Do you really think binary search is easy
作者已死?AI正用藝術征服人類
Markdown 中设置图片图注
随机推荐
word设置目录
The first Baidu push plug-in of dream weaving fully automatic collection Optimization SEO collection module
Multi attribute object detection on rare aircraft data sets: experimental process using yolov5
Path analysis model
Win10 64 bit Mitsubishi PLC software appears oleaut32 DLL access denied
智能终端设备加密防护的意义和措施
Yield method of tread
TypeScript接口与泛型的使用
Select all the lines with a symbol in word and change them to titles
首发织梦百度推送插件全自动收录优化seo收录模块
TypeScript 变量作用域
变量的命名规则十二条
Leetcode 78: subset
CDN acceleration and cracking anti-theft chain function
Get/post/put/patch/delete meaning
MPLS experiment
【mysql学习笔记30】锁(非教程)
If Jerry needs to send a large package, he needs to modify the MTU on the mobile terminal [article]
TS Basics
Fundamentals of C language 9: Functions