B - 小宝的幸运数组
原题面
描述
对于小宝来说,如果一个数组的总和能够整除他的幸运数字
对于子数组的定义,如果可以通过从开头和从结束分别删除若干个(可以为零或全部,前后删除个数不必相同)元素来从数组
输入
多组输入。第一行包含一个整数
每组测试数据包含两行,第一行包含两个整数
输出
对于每组数据,输出和能被
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
4 |
3 |
链接
https://ac.nowcoder.com/acm/contest/11746/B
题解
题意
求元素之和能被
思路
- 考虑数组的前缀和
,表示前 个元素之和。 - 若区间为
的子数组元素之和能被 整除,则 ,变形得 。 - 在求算前缀和的同时记录每一次前缀和对
取模的运算结果第一次出现的位置,若某一取模结果出现了两次及以上,则区间为 ( 为该取模结果第一次出现的下标, 为当前求算到的下标)的子数组为“幸运数组”。
时间复杂度
代码
1 | T = int(input()) |
C - 上进的凡凡
原题面
描述
凡凡是一个上进的人,他的人生没有下坡路,他也讨厌带有“下坡路”的东西。
所以,对于凡凡来说,只有非降序的数组才是nice的(如:
现在有一个长度为
你能帮帮他吗?
对于子数组的定义,如果可以通过从开头和从结束分别删除若干个(可以为零或全部,前后删除个数不必相同)元素来从数组
输入
第一行输入一个整数
第二行包含
输出
输出给定数组的子数组中是nice数组的个数。(注意使用long long
)
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
5 |
15 |
链接
https://ac.nowcoder.com/acm/contest/11746/C
题解
题意
求一个数组
思路
- 记
为数组 中以第 个元素作为不下降子串的结尾元素时,整个数组 中不下降子串的个数。 - 设
为某一不下降子串中从开头到当前下标的元素个数。 - 若
( 为当前下标),则将 累加 ;否则令 。之后令 。 - 最后的答案为
。
时间复杂度
代码
1 | n = int(input()) |
D - Seek the Joker I
原题面
描述
长达数日的春日祭终于告一段落,作为巫女的朝野芳乃在打扫完神社本决定好好享受一下久违的宁静。然而守护了神刀数百年的丛雨难耐寂寞,希望芳乃能陪她一起玩扑克消解愁闷。
芳乃并不擅长市井的游戏,所以总是输多赢少。而昨日被芳乃的神乐舞深深吸引,以致一早就前来建实神社希望能再睹芳华的你碰巧听见了此事。尽管不知道为什么美丽的巫女要自言自语地为玩扑克而苦恼,但你毅然决然地毛遂自荐,希望能为芳乃一解眉间愁。
芳乃告诉了你丛雨准备了
因为看不见丛雨而误认芳乃罹患精神分裂的你在不由感叹红颜薄命的同时,决定尽全力帮助芳乃完成她的委托。
声明:本题中的所有角色在剧情发生时均已超过18岁。
输入
第一行包含一个整数
每组测试数据共一行,包含两个正整数
数据保证
输出
对于每组测试数据给出一行结果。
如果芳乃必胜,则输出“yo xi no forever!
”,
否则输出 “ma la se mi no.1!
”。
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
4 |
ma la se mi no.1! |
链接
https://ac.nowcoder.com/acm/contest/11746/D
题解
题意
巴什博弈。
思路
- 若
为 的倍数,则后手有必胜策略:在一个回合内保证与先手拿走的牌的总数为 。 - 对于其余情况,后手无法保证出现只剩一张扑克牌的情况。
时间复杂度
代码
1 | T = int(input()) |
F - 成绩查询ing
原题面
描述
去年的新冠疫情爆发让众多大学生只能只能在家里上学,老师为了方便自己录入成绩和方便大家成绩查询,建立了一个录入和查询成绩的系统,能完成
输入
第一行包含一个整数
输出
输出
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
5 |
53 7591 1 |
链接
https://ac.nowcoder.com/acm/contest/11746/F
题解
题意
用名字查询该学生的信息;或用成绩查询获得该成绩的所有学生的姓名。
思路
- 采用支持哈希的容器按姓名存储信息。
- 对于按成绩查询,可以先将所有姓名按字典序排序,再按成绩存储信息。
时间复杂度
代码
1 | from collections import defaultdict |
H - 数羊
原题面
描述
憨憨小杨晚上睡不着觉,就开始数羊,她觉得一只一只数太慢了,突发奇想出了一种新的数羊方式,羊羊数量
现在给出
输入
多组输入。
第一行包含一个整数
每组测试数据包含一行,包含两个整数
输出
对每一组输入,在一行中输出
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
3 |
5 |
链接
https://ac.nowcoder.com/acm/contest/11746/H
题解
题意
计算函数
思路
- 由于
较大,直接递归计算不可取。 - 观察到范围中的
,又因为 为整数,故 只会取 三个值。 - 引理:
最终会化归为 ( )或 ( )的形式。 - 推论:由引理可知
的结果是一个正整数。 - 若
,则 。 - 若
,则 。 - 若
,则左边最终会化归为 的形式,故 ,即 。故 。 - 若
,则 且 ,故 为一个首项为 、公差为 的等差数列。故通项为 ( )。 - 综上所述,
( )。
- 若
- 若
,则 ( ),故 为一个首项为 、公比为 的等比数列。故通项为 ( )。 - 综上所述,
。
时间复杂度
代码
1 | def fpower(a: int, b: int) -> int: |
I - 买花
原题面
描述
情人节马上要到了,阳阳想送出
现在离情人节还有
输入
多组输入。第一行一个正整数
接下来T行,每行一个正整数
输出
每组数据输出一行,共
判断能否刚好买到YE5
“,否则输出”N0
“。
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
2 |
YE5 |
链接
https://ac.nowcoder.com/acm/contest/11746/I
题解
题意
构造数列
思路
- 设
,则通项为 ,前 项之和为 。 - 原问题可以转化为是否存在一个
使得 。 - 由于
只会取得 之间的整数,故可以预处理出所有 后依次判断 是否能被 整除。 - 注意输出。
时间复杂度
代码
1 | F = [(1 << i) - 1 for i in range(2, 16)] |
J - 这是一题简单的模拟
原题面
描述
财务计划要从家里出发,去
输入
第一行为两个正整数
随后的
```
城市A 城市B 花费
```
通路是双向的,且两个城市间最多有一条通路,不存在自环。保证所有花费大于
再下一行给出一个正整数
接下来1
3 1 2 3
表示实际路径为
输出
请你检验给出的
- 给出的路径能实际通车,即路径中相邻城市存在通路;
- 给出的路径恰好能都到达
个出差城市一次,即不能漏掉某个城市,也不能重复到达。
则称这条路径是可行的。
对于给出的-1
“。(题目保证花费和不超过int
范围)
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
5 10 |
37 |
链接
https://ac.nowcoder.com/acm/contest/11746/J
题解
题意
在一张给定的无向图上,判断给定的一条路线是否可以从起点既不重复、又不遗漏地经过全部
思路
- 由于
较小,可以使用邻接矩阵存图。 - 直接按照给定的路线模拟遍历即可。
- 用
set
(集合)可以达到不重复、不遗漏的需求。
时间复杂度
代码
1 | n, m = [int(x) for x in input().split()] |
题外话
- 这题是2020年团体程序设计天梯赛进阶级第四题《网红点打卡攻略》的原题,只是换了个背景,最终要求算的内容比原题要简单一些。
- 题目数据存在问题:不考虑重复到达也可以AC。
K - 黑洞密码
原题面
描述
近些日子,某科学家接受到了来自外太空的神秘讯息,在经过了一段时间的研究后,科学家发现讯息是一个由字母和数字组成的字符串str
,想要破译,需要通过一定的规则将字符串进行转换。规则如下:
- 确定讯息的长度为
; - 字符串中第
的字母和第 ( )的数字为一组,共 组; - 每组的第
个字符分别往后推每组第 个数字个数 例:如第一个字母为a
,第一个数字为 ,转换后变为d
,’z
‘之后是’B
‘,’Z
‘之后是’b
‘; - 将每组内部字母的顺序颠倒;
- 将四组字符合并就是最后的讯息。
输入
输入一个长度为
输出
输出转换后的密码
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
Zzc6Ltw2OD4yR640263W7G8G30HW9C71 |
RgCgJQwxJfYCDeQG |
链接
https://ac.nowcoder.com/acm/contest/11746/K
题解
题意
- 将字符串中所有字母、数字按原字符串顺序分成两排。
- 字母和数字分别按顺序取四位为一组,各分为四组。
- 取第一组字母和第一组数字,第一个字母向后移动第一个数字位,第二个字母向后移动第二个数字位,……,以此类推,然后将得到的四个新字母颠倒顺序。
- 取第二组字母和第二组数字,重复上一步中的流程。
- 第三、四组字母和数组按上述流程重复。
- 将得到的四组新字母依次首尾拼接,得到答案并输出。
思路
按照题意模拟即可,但需要一些花时间来理解出题人的谜语。
时间复杂度
代码
1 | def trans(c: str, k: int) -> str: |
L - 建立火车站
原题面
描述
新冠疫情,导致了各个城市之间物资输送的障碍。假设有
输入
第一行输入城市个数
第二行输入
输出
输出
时空限制
- 时间限制:
C/C++
,其他语言 - 空间限制:
C/C++
,其他语言
样例
输入 | 输出 |
---|---|
2 2 |
34 |
链接
https://ac.nowcoder.com/acm/contest/11746/L
题解
题意
数轴的正半轴上有一部分整数点已知,现需要在正半轴上添加一些整数点,使得相邻两点之间的最大距离最小。
思路
- 若已知相邻两点之间的最大距离为
,则对于以任意两相邻已知点为左右端点的区间内,都可以计算出在保证在当前这一区间内添加若干个点后的相邻两点间的最大距离为 的前提下,添加最少的点的数量。 - 即,在当前这一区间内距离左端点
处添加点。 - 若从左往右遍历所有由相邻已知点构成的区间后添加的点的数量不超过给定的
,则表示这个最大距离 是可能的答案之一,并且最优答案不会超过 。 - 故,该问题满足答案单调性,可以使用二分答案求解。
时间复杂度
代码
1 | n, k = [int(x) for x in input().split()] |
- 本文标题:第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛) - 部分题解
- 本文作者:myetyet
- 创建时间:2021-02-07 14:51:23
- 本文链接:https://myetyet.github.io/posts/10b8f9b8/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!