当前位置:网站首页>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
转载请说明出处
边栏推荐
- navicat如何导入MySQL脚本
- Multi attribute object detection on rare aircraft data sets: experimental process using yolov5
- Ble of Jerry [chapter]
- 杰理之BLE【篇】
- LeetCode Algorithm 2181. Merge nodes between zero
- [MySQL learning notes 32] mvcc
- How Navicat imports MySQL scripts
- Thought map of data warehouse construction
- The best way to learn SEO: search engine
- The first Baidu push plug-in of dream weaving fully automatic collection Optimization SEO collection module
猜你喜欢

Solution to the problem of breakthrough in OWASP juice shop shooting range

剪映的相关介绍

The way to learn go (I) the basic introduction of go to the first HelloWorld

Cookie Technology & session Technology & ServletContext object

JDBC学习笔记

L'auteur est mort? Ai utilise l'art pour conquérir l'humanité

微信公众号无限回调授权系统源码 全网首发
![[MySQL learning notes 30] lock (non tutorial)](/img/9b/1e27575d83ff40bebde118b925f609.png)
[MySQL learning notes 30] lock (non tutorial)

ORACLE列转行--某字段按指定分隔符转多行

word中如何删除某符号前面或后面所有的文字
随机推荐
Set picture annotation in markdown
Thought map of data warehouse construction
Wechat brain competition answer applet_ Support the flow main belt with the latest question bank file
Bloom taxonomy
word删除括号里内容
When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]
Structure summary of SystemVerilog integrable model
How Navicat imports MySQL scripts
[MySQL learning notes 32] mvcc
Raspberry pie serial port login and SSH login methods
TS基础篇
杰理之AD 系列 MIDI 功能说明【篇】
Do you really think binary search is easy
多线程和并发编程(二)
You deserve this high-value open-source third-party Netease cloud music player
How can word delete English only and keep Chinese or delete Chinese and keep English
MPLS experiment
Week6 weekly report
How are the open source Netease cloud music API projects implemented?
Fundamentals of C language 9: Functions