当前位置:网站首页>P2022 有趣的数(二分&数位dp)
P2022 有趣的数(二分&数位dp)
2022-07-06 04:11:00 【Harris-H】
P2022 有趣的数(二分&数位dp)
麻了。
二分答案,然后用数位dp计算 [ 1 , x ] [1,x] [1,x]中有多少个数字字典序 < < < k k k。
数位dp的时候开两个数组 a , b a,b a,b存 x , k x,k x,k。
然后就是常规的数位dp操作。
注意如果 d p dp dp数组开到 l i m , l e a d lim,lead lim,lead 则每次 c h e c k check check 都需要初始化 d p dp dp为 − 1 -1 −1。
因为这两个变量与 x x x有关。
否则可以只初始化一次。
另外 w , w 1 w,w1 w,w1长度不一定相同,所以 p o s 2 pos2 pos2可能减到 − 1 -1 −1。因此让 w 1 w1 w1基数为 20 20 20。
// Problem: P2022 有趣的数
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2022
// Memory Limit: 125 MB
// Time Limit: 400 ms
// Date: 2022-07-05 13:23:31
// --------by Herio--------
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ll f[20][40][2][2][2],n,m;
int a[20],w;
int b[40],w1;
ll dfs(int pos, int pos2, bool cmp, bool lim, bool lead) {
if (pos == 0)
return (cmp || pos2 > 20) && (!lead);
if ( f[pos][pos2][cmp][lim][lead] != -1)
return f[pos][pos2][cmp][lim][lead];
ll tmp = 0, up = lim ? a[pos] : 9;
for (int i = 0; i <= up; ++i) {
bool nxcmp = !(lead && i == 0) && i < b[pos2];
nxcmp |= cmp;
if (!cmp && i > b[pos2])
continue;
tmp += dfs(pos - 1, pos2 - ((lead && i == 0) ? 0 : 1), nxcmp, lim && i == a[pos], lead && i == 0);
}
return f[pos][pos2][cmp][lim][lead] = tmp;
}
ll check(ll n) {
w = 0;memset(f, -1, sizeof (f));
while (n)
a[++w] = n % 10, n /= 10;
//printf("w=%d\n",w);
ll re = dfs(w, w1, false, true, true);
return re;
}
int main()
{
scanf("%lld%lld", &n, &m);
w1 = 20;
ll l = m > n ? m : n, r = 7e17, ans = 0;
while (n)
b[++w1] = n % 10, n /= 10;
//printf("w1=%d\n",w1);
for (; l <= r;) {
ll mid = (l + r) >> 1, tmp = check(mid);
// printf("%lld %lld\n",mid,tmp);
if (tmp == m - 1) {
ans = mid; r = mid - 1;
}
else if (tmp < m - 1) l = mid + 1;
else r = mid - 1;
}
printf("%lld\n", ans);
}
边栏推荐
- Cf464e the classic problem [shortest path, chairman tree]
- MySql數據庫root賬戶無法遠程登陸解决辦法
- Class A, B, C networks and subnet masks in IPv4
- How to modify field constraints (type, default, null, etc.) in a table
- 【FPGA教程案例11】基于vivado核的除法器设计与实现
- 图应用详解
- Slow SQL fetching and analysis of MySQL database
- 食品行业仓储条码管理系统解决方案
- Fundamentals of SQL database operation
- 脚本生命周期
猜你喜欢
No qualifying bean of type ‘......‘ available
ESP32_ FreeRTOS_ Arduino_ 1_ Create task
10个 Istio 流量管理 最常用的例子,你知道几个?
图应用详解
[introduction to Django] 11 web page associated MySQL single field table (add, modify, delete)
How to solve the problem of slow downloading from foreign NPM official servers—— Teach you two ways to switch to Taobao NPM image server
【leetcode】1189. Maximum number of "balloons"
Stable Huawei micro certification, stable Huawei cloud database service practice
SSTI template injection explanation and real problem practice
C (thirty) C combobox listview TreeView
随机推荐
Stable Huawei micro certification, stable Huawei cloud database service practice
软考 系统架构设计师 简明教程 | 总目录
P2648 make money
Ks008 SSM based press release system
Hashcode and equals
C language -- structs, unions, enumerations, and custom types
Database, relational database and NoSQL non relational database
AcWing 243. A simple integer problem 2 (tree array interval modification interval query)
math_极限&微分&导数&微商/对数函数的导函数推导(导数定义极限法)/指数函数求导公式推导(反函数求导法则/对数求导法)
Error 1045 (28000): access denied for user 'root' @ 'localhost' (using password: no/yes
10個 Istio 流量管理 最常用的例子,你知道幾個?
DM8 archive log file manual switching
Prime protocol announces cross chain interconnection applications on moonbeam
Exchange bottles (graph theory + thinking)
How to modify field constraints (type, default, null, etc.) in a table
Maxay paper latex template description
Lombok原理和同时使⽤@Data和@Builder 的坑
HotSpot VM
Yyds dry goods inventory hcie security Day11: preliminary study of firewall dual machine hot standby and vgmp concepts
80% of the diseases are caused by bad living habits. There are eight common bad habits, which are both physical and mental