当前位置:网站首页>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 learning notes
- js對象獲取屬性的方法(.和[]方式)
- Ble of Jerry [chapter]
- Cookie技术&Session技术&ServletContext对象
- [JDBC] quick start tutorial
- TypeScript void 基础类型
- OpenJudge NOI 2.1 1661:Bomb Game
- word中如何删除某符号前面或后面所有的文字
- You deserve this high-value open-source third-party Netease cloud music player
- The first Baidu push plug-in of dream weaving fully automatic collection Optimization SEO collection module
猜你喜欢
Idea console color log
Jerry's ad series MIDI function description [chapter]
Configure raspberry pie access network
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
When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]
数字IC设计笔试题汇总(一)
Thought map of data warehouse construction
leetcode841. Keys and rooms (medium)
【线上问题处理】因代码造成mysql表死锁的问题,如何杀掉对应的进程
杰理之BLE【篇】
随机推荐
Markdown 中设置图片图注
Leetcode35. search the insertion position (simple, find the insertion position, different writing methods)
超级浏览器是指纹浏览器吗?怎样选择一款好的超级浏览器?
Memory error during variable parameter overload
After the hot update of uniapp, "mismatched versions may cause application exceptions" causes and Solutions
Word delete the contents in brackets
Seriously recommend several machine learning official account
TS基础篇
Uni app practical project
word删除括号里内容
word中把帶有某個符號的行全部選中,更改為標題
Summary of Digital IC design written examination questions (I)
杰理之BLE【篇】
Oracle database 11gr2 uses TDE transparent data encryption to report an error ora28353. If you run to close the wallet, you will report an error ora28365. If you run to open the wallet, you will repor
How are the open source Netease cloud music API projects implemented?
【MySQL学习笔记32】mvcc
数据仓库建设思维导图
word设置目录
Oracle column to row -- a field is converted to multiple rows according to the specified separator
Supervisor usage document