当前位置:网站首页>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
转载请说明出处
边栏推荐
- 【JDBC】快速入门教程
- OpenGL ES 学习初识(1)
- leetcode1020. Number of enclaves (medium)
- How Navicat imports MySQL scripts
- Méthode d'obtention des propriétés de l'objet JS (.Et [] méthodes)
- Lesson 12 study notes 2022.02.11
- word删除括号里内容
- js对象获取属性的方法(.和[]方式)
- Jerry's ad series MIDI function description [chapter]
- Ble of Jerry [chapter]
猜你喜欢
学go之路(一)go的基本介绍到第一个helloworld
数字IC设计笔试题汇总(一)
How MySQL merges data
Summary of Digital IC design written examination questions (I)
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
OpenGL ES 学习初识(1)
leetcode841. Keys and rooms (medium)
Bugku CTF daily question: do you want seeds? Blackmailed
【线上问题处理】因代码造成mysql表死锁的问题,如何杀掉对应的进程
Solution to the problem of breakthrough in OWASP juice shop shooting range
随机推荐
Bloom taxonomy
Is software testing outsourcing going or not? Three years' real outsourcing experience tells you
Twelve rules for naming variables
Jerry needs to modify the profile definition of GATT [chapter]
NiO programming introduction
Babbitt | metauniverse daily must read: the group image of Chinese Internet enterprises pouring into metauniverse: "there are only various survival desires, and there is no ambition for forward-lookin
杰理之AD 系列 MIDI 功能说明【篇】
[JDBC] quick start tutorial
Upgraded wechat tool applet source code for mobile phone detection - supports a variety of main traffic modes
TypeScript 接口属性
[MySQL learning notes 30] lock (non tutorial)
【mysql学习笔记29】触发器
Méthode d'obtention des propriétés de l'objet JS (.Et [] méthodes)
呆错图床系统源码图片CDN加速与破解防盗链功能
杰理之蓝牙设备想要发送数据给手机,需要手机先打开 notify 通道【篇】
How are the open source Netease cloud music API projects implemented?
GET/POST/PUT/PATCH/DELETE含义
位运算异或
Establishment and operation of cloud platform open source project environment
杰理之BLE【篇】