数位DP模型

目录

  • 度的数量
    • 思路
    • 代码实现
      • 暴力解法
      • 数位DP
  • 数字游戏
    • 代码实现
  • Windy数
    • 代码实现
  • 数字游戏 II
    • 代码实现
  • 不要62
    • 代码实现
  • 恨7不成妻
    • 代码实现


度的数量

题目描述:

求给定区间 [ X , Y ] [X,Y] [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K K K 个互不相等的 B B B 的整数次幂之和。

例如,设 X = 15 , Y = 20 , K = 2 , B = 2 X=15, Y=20, K=2, B=2 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意:

17 = 2 4 + 2 0 17 = 2^4 + 2^0 17=24+20

18 = 2 4 + 2 1 18 = 2^4 + 2^1 18=24+21

20 = 2 4 + 2 2 20 = 2^4 + 2^2 20=24+22

输入格式:

第一行包含两个整数 X X X Y Y Y,接下来两行包含整数 K K K B B B

输出格式:

只包含一个整数,表示满足条件的数的个数。

数据范围:

1 ≤ X ≤ Y ≤ 2 31 − 1 , 1 ≤ K ≤ 20 , 2 ≤ B ≤ 10 1 ≤ X ≤ Y ≤ 2^{31} − 1, 1 ≤ K ≤ 20, 2 ≤ B ≤ 10 1XY2311,1K20,2B10

输入样例:

15 20
2
2

输出样例:

3

思路

利用前缀和的思想求解对应区间符合形式的数的个数。

[ l , r ] ⇔ [ 0 , r ] − [ 0 , l − 1 ] [l, r] ⇔ [0, r] - [0, l - 1] [l,r][0,r][0,l1]

要使这个数恰好等于 K K K 个互不相等的 B B B 的整数次幂之和,即化为 B B B 进制之后,存在 K K K 1 1 1,除 1 1 1 0 0 0 之外的数均不可出现。

例如: B = 3 B=3 B=3 K = 2 K=2 K=2,一个符合的数是 12 12 12,把 12 12 12 化为三进制 110 ,其中有 2 2 2 1 1 1,其余都是 0 0 0


代码实现

暴力解法

import sys
input = sys.stdin.readlinex, y = map(int, input().strip().split())
k, b = int(input().strip()), int(input().strip())def dfs(cnt, idx, total, up):if total > up:return 0if cnt == k:return 1if pow(b, idx) > up:return 0return dfs(cnt, idx + 1, total, up) + dfs(cnt + 1, idx + 1, total + pow(b, idx), up)print(dfs(0, 0, 0, y) - dfs(0, 0, 0, x - 1))

数位DP

import sys
from functools import cache
sys.setrecursionlimit(1000000)
input = sys.stdin.readlinex, y = map(int, input().strip().split())
k, b = int(input().strip()), int(input().strip())def int_to_base_b(n):if n == 0:return "0"res = ""while n:res = str(n % b) + resn //= breturn res@cache
def dfs(idx, cnt, is_limit, is_num, s):if len(s) == idx:return int(cnt == k and is_num)if cnt > k:return 0res = 0if not is_num:res = dfs(idx + 1, cnt, False, False, s)up = min(1, int(s[idx])) if is_limit else 1for d in range(1 - int(is_num), up + 1):res += dfs(idx + 1, cnt + d, is_limit and d == int(s[idx]), True, s)return resprint(dfs(0, 0, True, False, int_to_base_b(y)) - dfs(0, 0, True, False, int_to_base_b(x - 1)))

数字游戏

题目描述:

科协里最近很流行数字游戏。

某人命名了一种不降数,这种数字必须满足从左到右各位数字呈非下降关系,如 123 123 123 446 446 446

现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。

输入格式:

输入包含多组测试数据。

每组数据占一行,包含两个整数 a a a b b b

输出格式:

每行给出一组测试数据的答案,即 [ a , b ] [a,b] [a,b] 之间有多少不降数。

数据范围:

1 ≤ a ≤ b ≤ 2 3 1 − 1 1 ≤ a ≤ b ≤ 2^31−1 1ab2311

输入样例:

1 9
1 19

输出样例:

9
18

代码实现

import sys
from functools import lru_cache
sys.setrecursionlimit(1000000)
input = sys.stdin.readline@lru_cache(maxsize=None, typed=False)
def dfs(idx, front, is_limit, is_num, s):if idx == len(s):return int(is_num)res = 0if not is_num:res = dfs(idx + 1, 0, False, False, s)up = int(s[idx]) if is_limit else 9for d in range(max(1 - int(is_num), front), up + 1):res += dfs(idx + 1, d, is_limit and d == up, True, s)return restry:while True:a, b = map(int, input().strip().split())print(dfs(0, 0, True, False, str(b)) - dfs(0, 0, True, False, str(a - 1)))except ValueError:sys.exit(0)

Windy数

题目描述:

W i n d y Windy Windy 定义了一种 W i n d y Windy Windy 数:不含前导零且相邻两个数字之差至少为 2 2 2 的正整数被称为 W i n d y Windy Windy 数。

W i n d y Windy Windy 想知道,在 A A A B B B 之间,包括 A A A B B B,总共有多少个 W i n d y Windy Windy 数?

输入格式:

共一行,包含两个整数 A A A B B B

输出格式:

输出一个整数,表示答案。

数据范围:

1 ≤ A ≤ B ≤ 2 × 1 0 9 1 ≤ A ≤ B ≤ 2×10^9 1AB2×109

输入样例1:

1 10

输出样例1:

9

输入样例2:

25 50

输出样例2:

20

代码实现

import sys
from functools import lru_cache
sys.setrecursionlimit(1000000)
input = sys.stdin.readline@lru_cache(maxsize=None, typed=False)
def dfs(idx, front, is_limit, is_num, s):if idx == len(s):return int(is_num)res = 0if not is_num:res = dfs(idx + 1, front, False, False, s)up = int(s[idx]) if is_limit else 9for d in range(1 - int(is_num), up + 1):if is_num and abs(front - d) < 2:continueres += dfs(idx + 1, d, is_limit and d == up, True, s)return resa, b = map(int, input().strip().split())
print(dfs(0, 0, True, False, str(b)) - dfs(0, 0, True, False, str(a - 1)))

数字游戏 II

题目描述:

由于科协里最近真的很流行数字游戏。

某人又命名了一种取模数,这种数字必须满足各位数字之和 m o d N \mod N modN 0 0 0

现在大家又要玩游戏了,指定一个整数闭区间 [ a , b ] [a,b] [a,b],问这个区间内有多少个取模数。

输入格式:

输入包含多组测试数据,每组数据占一行。

每组数据包含三个整数 a , b , N a, b, N a,b,N

输出格式:

对于每个测试数据输出一行结果,表示区间内各位数字和 m o d N \mod N modN 0 0 0 的数的个数。

数据范围:

1 ≤ a , b ≤ 2 31 − 1 , 1 ≤ N < 100 1 ≤ a, b ≤ 2^{31}−1, 1 ≤ N < 100 1a,b2311,1N<100

输入样例:

1 19 9

输出样例:

2

代码实现

import sys
from functools import lru_cache
sys.setrecursionlimit(1000000)
input = sys.stdin.readlinea, b, N = map(int, input().strip().split())@lru_cache(maxsize=None, typed=False)
def dfs(idx, total, is_limit, is_num, s):if len(s) == idx:return int(is_num and total % N == 0)res = 0if not is_num:res = dfs(idx + 1, total, False, False, s)up = int(s[idx]) if is_limit else 9for d in range(1 - int(is_num), up + 1):res += dfs(idx + 1, (total + d) % N, is_limit and d == up, True, s)return resprint(dfs(0, 0, True, False, str(b)) - dfs(0, 0, True, False, str(a - 1)))

不要62

题目描述:

杭州人称那些傻乎乎粘嗒嗒的人为 62 62 62(音: l a o e r laoer laoer)。

杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。

不吉利的数字为所有含有 4 4 4 62 62 62 的号码。例如: 62315 62315 62315 73418 73418 73418 88914 88914 88914 都属于不吉利号码。但是, 61152 61152 61152 虽然含有 6 6 6 2 2 2,但不是连号,所以不属于不吉利数字之列。

你的任务是,对于每次给出的一个牌照号区间 [ n , m ] [n, m] [n,m],推断出交管局今后又要实际上给多少辆新的士车上牌照了。

输入格式:

输入包含多组测试数据,每组数据占一行。

每组数据包含一个整数对 n n n m m m

当输入一行为 0 0 时,表示输入结束。

输出格式:

对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。

数据范围:

1 ≤ n ≤ m ≤ 1 0 9 1 ≤ n ≤ m ≤ 10^9 1nm109

输入样例:

1 100
0 0

输出样例:

80

代码实现

import sys
from functools import lru_cache
sys.setrecursionlimit(1000000)
input = sys.stdin.readline@lru_cache(maxsize=None, typed=False)
def dfs(idx, front, is_limit, is_num, s):if idx == len(s):return int(is_num)res = 0if not is_num:res = dfs(idx + 1, front, False, False, s)up = int(s[idx]) if is_limit else 9for d in range(1 - int(is_num), up + 1):if is_num and d == 2 and front == 6 or d == 4:continueres += dfs(idx + 1, d, is_limit and d == up, True, s)return reswhile True:n, m = map(int, input().strip().split())if n == m == 0:breakprint(dfs(0, 0, True, False, str(m)) - dfs(0, 0, True, False, str(n - 1)))

恨7不成妻

题目描述:

单身!

依然单身!

吉哥依然单身!

D S DS DS 级码农吉哥依然单身!

所以,他平生最恨情人节,不管是 214 214 214 还是 77 77 77,他都讨厌!

吉哥观察了 214 214 214 77 77 77 这两个数,发现:

2 + 1 + 4 = 7 2 + 1 + 4 = 7 2+1+4=7

7 + 7 = 7 × 2 7 + 7 = 7 \times 2 7+7=7×2

77 = 7 × 11 77 = 7 \times 11 77=7×11

最终,他发现原来这一切归根到底都是因为和 7 7 7 有关!

所以,他现在甚至讨厌一切和 7 7 7$ 有关的数!

什么样的数和 7 7 7 有关呢?

如果一个整数符合下面三个条件之一,那么我们就说这个整数和 7 7 7 有关:

① 整数中某一位是 7 7 7

② 整数的每一位加起来的和是 7 7 7 的整数倍;

③ 这个整数是 7 7 7 的整数倍。

现在问题来了:吉哥想知道在一定区间内和 7 7 7 无关的整数的平方和。

输入格式:

第一行包含整数 T T T,表示共有 T T T 组测试数据。

接下来 T T T 行,每行包含两个整数 L L L R R R

输出格式:

对于每组数据,请计算 [ L , R ] [L, R] [L,R] 中和 7 7 7 无关的数字的平方和,并将结果对 1 0 9 + 7 10^9 + 7 109+7 取模后输出。

数据范围:

1 ≤ T ≤ 50 1 ≤ T ≤ 50 1T50

1 ≤ L ≤ R ≤ 1 0 18 1 ≤ L ≤ R ≤ 10^{18} 1LR1018

输入样例:

3
1 9
10 11
17 17

输出样例:

236
221
0

代码实现

import sys
from functools import lru_cache
sys.setrecursionlimit(1000000)
input = sys.stdin.readline@lru_cache(maxsize=None, typed=False)
def dfs(idx, sum_digit, total, is_limit, is_num, s):if idx == len(s):if not is_num or sum_digit % 7 == 0 or int(total) % 7 == 0:return 0return int(total) ** 2res = 0if not is_num:res = dfs(idx + 1, sum_digit, total, False, False, s)up = int(s[idx]) if is_limit else 9for d in range(1 - int(is_num), up + 1):if d == 7:continueres += dfs(idx + 1, sum_digit + d, total + str(d), is_limit and d == up, True, s)return rest = int(input().strip())
for _ in range(t):a, b = map(int, input().strip().split())print(dfs(0, 0, "", True, False, str(b)) - dfs(0, 0, "", True, False, str(a - 1)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装Schedule库的方法最终解答!_Python第三方库

安装Python第三方库Schedule 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Schedule库 Schedule 是一个轻量级、功能强大而灵活的任务调度工具库&#xff0c;用于在指定的时间间隔内执行任务。为用户提供了简单易用的…

kali使用msf+apkhook520+cploar实现安卓手的攻击

学习网络安全的过程中&#xff0c;突发奇想怎么才能控制或者说是攻击手机 边找工作边实验 话不多说启动kali 一、使用msfapktool生成简单的木马程序 首先使用kali自带的msfvenom写上这样一段代码 选择安卓 kali的ip 一个空闲的端口 要输出的文件名 msfvenom -p android/met…

kafka(五)——消费者流程分析(c++)

概念 ​ 消费者组&#xff08;Consumer Group&#xff09;&#xff1a;由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费&#xff1b;消费者组之间互不影响。所有的消费者都属于某个消费者组&#xff0c;即消费者…

计算机是怎么工作的7

内存分配——内存管理&#xff08;Memory Mangae) 进程如何管理内存&#xff0c;其实是一个非常复杂的事情 核心结论&#xff1a;每个进程的内存&#xff0c;是彼此独立&#xff0c;互不干扰的 通常情况下&#xff0c;进程A不能直接访问进程B的内存; 为了系统的稳定性 如果…

今日arXiv最热大模型论文:Dataverse,针对大模型的开源ETL工具,数据清洗不再难!

引言&#xff1a;大数据时代下的ETL挑战 随着大数据时代的到来&#xff0c;数据处理的规模和复杂性不断增加&#xff0c;尤其是在大语言模型&#xff08;LLMs&#xff09;的开发中&#xff0c;对海量数据的需求呈指数级增长。这种所谓的“规模化法则”表明&#xff0c;LLM的性…

HTML - 请你说一下如何阻止a标签跳转

难度级别:初级及以上 提问概率:55% a标签的默认语义化功能就是超链接,HTML给它的定位就是与外部页面进行交流,不过也可以通过锚点功能,定位到本页面的固定id区域去。但在开发场景中,又避免不了禁用a标签的需求,那么都有哪些方式可以禁用…

【就近接入,智能DNS-Geo DNS ,大揭秘!】

做过后端服务或者网络加速的小伙伴&#xff0c;可能或多或少都听说过&#xff0c;智能DNS或者Geo DNS&#xff0c;就是根据用户的位置&#xff0c;返回离用户最近的服务节点&#xff0c;就近接入&#xff0c;以达到服务提速的效果。 那么大家有没想过&#xff0c;这个背后的原理…

成绩分析 蓝桥杯 java

成绩分析 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入格式 输入的第一行包含一个整数 n&#xff0c;表示考试人数。 接下来 n 行&#xff0c;每行包含一…

C++:日期类的实现 const修饰 取地址及const取地址操作符重载(类的6个默认成员函数完结篇)

一、日期类的实现 根据之前赋值运算符重载逻辑&#xff0c;我们现在来实现完整的日期类。 1.1 判断小于 上篇博客已经实现: bool operator<(const Date& d) {if (_year < d._year){return true;}else if (_year d._year){if (_month < d._month){return true…

总结C/C++中程序内存区域划分

C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很⾼…

KISS 原则和 YAGNI原则

设计模式专栏&#xff1a;http://t.csdnimg.cn/3a25S 目录 1.引言 2.代码并非行数越少越简单 3.代码复杂不一定违反 KISS 原则 4.如何写出满足 KISS 原则的代码 5.YAGNI原则和 KISS 原则的区别 1.引言 KISS原则的英文描述有3种版本:Keep It Simple and Supid、 keep It Sh…

OpenHarmony开发技术:【国际化】实例

国际化 如今越来的越多的应用都走向了海外&#xff0c;应用走向海外需要支持不同国家的语言&#xff0c;这就意味着应用资源文件需要支持不同语言环境下的显示。本节就介绍一下设备语言环境变更后&#xff0c;如何让应用支持多语言。 应用支持多语言 ArkUI开发框架对多语言的…

Autowired和Resource的关系?

相同点 对于下面的代码来说&#xff0c;如果是Spring容器的话&#xff0c;两个注解的功能基本是等价的&#xff0c;他们都可以将bean注入到对应的field中 Autowired private Bean beanA; Resource private Bean beanB; 不同点 byName和byType匹配顺序不同 Autowired在获取…

TypeScript—详解、小案例(配合源代码)

简介&#xff1a;TypeScript是微软开发的 JavaScript 的超集&#xff0c;TypeScript兼容JavaScript&#xff0c;可以载入JavaScript代码然后运行。TypeScript与JavaScript相比进步的地方 包括&#xff1a;加入注释&#xff0c;让编译器理解所支持的对象和函数&#xff0c;编译器…

Web路径专题

文章目录 1.资源定位1.前置条件上下文路径设置 2.上下文路径介绍重点说明 3.资源定位方式资源路径 上下文路径 资源位置a.html定位C.java定位 4.浏览器和服务器解析的区别1.浏览器解析/&#xff08;地址变化&#xff09;2.服务器解析/&#xff08;地址不变&#xff09; 5.带/…

备份工具--kopia

kopia 备份测试 安装minio wget https://dl.min.io/server/minio/release/linux-amd64/minio 创建目录 mkdir -p /data/myapp/minio mkdir -p /data/minidata 配置启动 cat start_minio.sh nohup /data/myapp/minio/minio server --console-address :“9090” /data/minidata…

数据流重定向

数据流重定向 标准输入 0 标准输出 1 标准错误输出 2 输出 > 标准输出 1>标准错误输出 2>标准输出标准错误输出 2>&1 或 &> 输入 < 标准输入 0<eof输入 cat > catfile <<“eof” 双向重定向 tee [command] | tee -a [file] [comma…

Spring和Spring MVC和MyBatis面试题

面试题1&#xff1a;请简述Spring、Spring MVC和MyBatis在整合开发中的作用&#xff1f; 答案&#xff1a; Spring&#xff1a;是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;的容器框架。它提供了强大的依赖注入功能&#xff0c;…

git学习 1

打开自己想要存放git仓库的文件夹&#xff0c;右键打开git bush&#xff0c;用git init命令建立仓库 用 ls -a(表示全都要看&#xff0c;包括隐藏的)可以看到git仓库 也可以用 git clone 接github链接&#xff08;点code选项里面会给链接&#xff0c;结尾是git的那个&#xf…

程序员开发指南-- reference

01. 项目介绍 为开发人员分享快速参考备忘清单【速查表】 GitHub - jaywcjlove/reference: 为开发人员分享快速参考备忘清单(速查表) 02. 部署Quick Reference网站 docker pull wcjiang/reference docker run --name reference --rm -d -p 9667:3000 wcjiang/reference:lat…