当前位置:网站首页>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
转载请说明出处
边栏推荐
- 杰理之普通透传测试---做数传搭配 APP 通信【篇】
- Configure raspberry pie access network
- Supervisor usage document
- Word delete the contents in brackets
- C - Inheritance - polymorphism - virtual function member (lower)
- 呆错图床系统源码图片CDN加速与破解防盗链功能
- Establishment and operation of cloud platform open source project environment
- GET/POST/PUT/PATCH/DELETE含义
- 杰理之BLE【篇】
- 变量的命名规则十二条
猜你喜欢
杰理之开发板上电开机,就可以手机打开 NRF 的 APP【篇】
[MySQL learning notes 30] lock (non tutorial)
杰理之蓝牙设备想要发送数据给手机,需要手机先打开 notify 通道【篇】
Thought map of data warehouse construction
Leetcode35. search the insertion position (simple, find the insertion position, different writing methods)
杰理之如若需要大包发送,需要手机端修改 MTU【篇】
Configure raspberry pie access network
Lesson 12 study notes 2022.02.11
杰理之BLE【篇】
Week6 weekly report
随机推荐
Leetcode 78: subset
Select all the lines with a symbol in word and change them to titles
CDN acceleration and cracking anti-theft chain function
Sélectionnez toutes les lignes avec un symbole dans Word et changez - les en titre
Set picture annotation in markdown
树莓派3B更新vim
Detailed explanation | detailed explanation of internal mechanism of industrial robot
首发织梦百度推送插件全自动收录优化seo收录模块
TS基础篇
Raspberry pie serial port login and SSH login methods
L'auteur est mort? Ai utilise l'art pour conquérir l'humanité
杰理之普通透传测试---做数传搭配 APP 通信【篇】
数字IC设计笔试题汇总(一)
Thought map of data warehouse construction
数据仓库建设思维导图
作者已死?AI正用藝術征服人類
【MySQL学习笔记32】mvcc
C - Inheritance - hidden method
微信公众号无限回调授权系统源码 全网首发
Supervisor usage document