Python解题 - CSDN周赛第36期
创始人
2024-06-02 00:48:15
0

本期有点难度,系统也没有多少bug,算是最近 N 期周赛里质量较高的一期比赛了。


第一题:查找点在自然区间的坐标

定义:实数轴上的一个区间由左右两个端点,假设区间是左闭右开的,例如区间`[0,1)`。

给定一个有序的不重合非负整数区间列表 `range_list` :[ `[0,1)`, `[3,4)` ],该非负整数区间列表将实数轴分割成了这些区间列表 `range_list_nature_ext` :[`(-∞,0)`, `[0,1)`, `[1,3)`, `[3,4)`, '[4,+∞)`]。我们称 `range_list_nature_ext` 为由 `range_list` 扩展的 `自然区间`。

问题:写一个查找算法,对于给定非负整数区间列表 `range_list` ,查找一个非负整数 `p` 落在了 `range_list_nature_ext` 的那个区间,返回那个区间的在 `range_list_nature_ext` 里的下标,我们称这个下标为非负整数 `p` 在 `range_list` 里的 `自然坐标`。

示例:

示例
输入12 2
0 10
15 20
输出2

分析

给出的区间是左闭右开,且互不重合,所以只要用一个列表记录给出的区间左边的数字,就可保证要查询的位置是唯一的。而区间的右边数字用来和下一个区间左边的数字进行比较,如果相同,则说明这两个区间之间没有额外的空间,如果不同(肯定是前者比后者小),则存在一个中间的区间,所以要“插入”区间右边的数字(较小的那个数字)来表示中间区间。

比如示例中给出的 [0, 10) 和 [15, 20),第一个区间右边的数字 10 比第二个区间左边的数字 15 更小,所以存在一个中间区间 [10, 15),于是得到可以用来表示区间的数字为 [0, 10, 15],而且该数字必然是单调递增的。

接下来就比较简单了,遍历该列表,找出第一个比 p 大的数字在列表中的位置,就是答案。如果没有比 p 大的数字,则说明 p 位于最后一个区间,所以其位置就等于列表的长度。

由于列表单调递增,所以查找的时候可以用二分,但对此题区别不大,因为前面遍历区间生成列表已经是 O(n) 的复杂度了,这里使用二分 O(logn),并不会改变整体的复杂度。


第二题:鬼画符门之大师兄恋爱

鬼画符门,每年都会统计自己宗门鬼画符消耗的数量。 往年一直是大师兄管理。 但是大师兄谈恋爱了!!怎么能让这种事耽误自己恋爱时间呢!! 鬼艺接手了!! 你能帮鬼艺写一个程序帮助她统计每年消耗数量最多的鬼画符吗?

示例
输入5
red
red
green
grenn
hen
输出red

分析

本题其实就是找所有字符串里出现次数最多的那个,由于没有说明如果出现次数最多的有多个字符串该输出哪个(同类题目一般是按字典序输出第一个),所以可以认为不会出现多个答案。

使用 Python 内置的 Counter 类将所有出现的字符串转化为字典,然后输出出现次数最多的那个即可。而 Counter 类也有现成的 most_common() 方法。除了输入,计算加输出就两行代码。

参考代码

from collections import Counter
print(Counter(vector).most_common()[0][0])

第三题:去除整数

已知存在集合A包含n个整数,从1到n。 存在m个整数a。 在集合A中去除这m个整数的的倍数。 输出集合中包含的元素的个数。(1<=n<=1e9,1<=m<=10)

示例:

示例一示例二
输入5 2
2 3
27202192 1
725
输出327164672

分析

本题考察一个基本的数学思想——容斥定理。

我们先来看最简单的情况,如果只有一个整数,也就是 m = 1 的情况。比如 n = 20,要去除的其倍数的数字是 2,那么很显然,所有偶数都会被去除,总共需要去掉 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 共十个数。由于结果只需要输出剩下的数字个数,而不需要输出剩下哪些数,所以我们不需要从 1 遍历到 20,而是可以通过简单的计算得到 20 里含有多少个 2 的倍数,也就是 20\div 2,向下取整,得到需要去掉 10 个数,答案就是 20-10=10 。

如果有两个整数呢?比如要去除的是 2 和 3 的倍数。我们如法炮制,先去掉十个2的倍数:2,4,6,8,10,12,14,16,18,20,计算公式为 20\div 2,再去掉六个3的倍数:3,6,9,12,15,18,计算公式为20 \div 3。这时就会发现答案不对了,因为对于那些既是 2 的倍数也是 3 的倍数,比如 6,12,18,我们去除了两次,所以还要把这三个数加回来。而这样的数有多少呢?答案就是 20 \div lcm(2, 3),(lcm 表示两个数的最小公倍数),也就是 20 \div 6 = 3 个。最后的答案就是 20-20 \div 2-20 \div 3+20\div6=7 个。

通过检查三个以上的数的情况,我们可以得到这样一个规律:对于 m 个数,我们要去掉其中奇数个数字最小公倍数的倍数,加上偶数个数字最小公倍数的倍数。比如对于从 n 中去掉三个数字a, b, c 的倍数,我们最后要得到的答案用公式表示即:

ans = n-\frac{n}{a}-\frac{n}{b}-\frac{n}{c}+\frac{n}{lcm(a,b)}+\frac{n}{lcm(a,c)}+\frac{n}{lcm(b,c)}-\frac{n}{lcm(a,b,c)}

由于本题的 m 很小(m\leq 10),所以最多仅存在 2^{10}=1024 种组合。于是我们可以先用内置排列组合函数将 m 个整数的所有长度的所有排列组合找出来,分别计算这些组合的最小公倍数;再用 n 分别与其相除,得到每种组合的倍数的个数;最后再判断每种组合里有几个数,奇数则减去倍数的个数,偶数则加上,最后即可得到答案。

某些题解会使用状态压缩DP来递推组合数的最小公倍数,但由于此题计算规模不大,用不用皆可,因为原理都是一样的,用不用状压只是实现手段不同罢了。


第四题:括号上色

小艺酱又得到了一堆括号。 括号是严格匹配的。 现在给括号进行上色。 上色有三个要求: 1、只有三种上色方案,不上色,上红色,上蓝色。 2、每对括号只有一个上色。 3、相邻的两个括号不能上相同的颜色,但是可以都不上色。 问括号 上色有多少种方案?答案对1000000007取模。

分析

10 期考过的老题,也是CF的原题,难度中等偏上,如果没刷过,能做出来还是很考验经验和编码能力的。而且关键是英文原题的描述并没有被准确翻译成中文:

  • For any pair of matching brackets exactly one of them is colored. In other words, for any bracket the following is true: either it or the matching bracket that corresponds to it is colored.

原题说得很清楚,一对括号里只能有、且必须有一个被上色,但遗憾的是中文描述还是少了这一条,导致部分选手可能产生误解(认为一对括号可以都不染色),浪费了时间。

题目本身质量还是挺高的,可以参考问哥以前写的题解,代码注释的部分也解释得很详细了。

相关内容

热门资讯

教师节活动主持词 教师节活动主持词  一、什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动...
百日宴致辞 百日宴致辞范文  在日复一日的学习、工作或生活中,许多人都有过写致辞的经历,对致辞都不陌生吧,在各种...
2021年会总经理简短致辞 2021年会总经理简短致辞范文(通用6篇)  在学习、工作、生活中,许多人都有过写致辞的经历,对致辞...
中学秋季开学典礼主持词 中学秋季开学典礼主持词  中学秋季开学典礼主持词    第一项:升国旗仪式(升旗仪式结束后,请新教师...
婚礼男方家长经典致辞 婚礼男方家长经典致辞  大家好!今天是我儿子××和××小姐结婚的大喜日子,我感到非常高兴和荣幸。高兴...
元宵晚会主持词 关于元宵晚会主持词(通用11篇)  主持词是主持人在台上表演的灵魂之所在。在当今社会生活中,司仪等是...
国学经典诵读比赛主持词 国学经典诵读比赛主持词  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。随着社会...
离职感谢词 离职感谢词  在xx近两个月的生活,让我感触很多,首先感谢领导一直以来对我们的包容,感谢x经理的照顾...
年会总经理致辞 年会总经理致辞(精选7篇)  在学习、工作、生活中,大家都经常接触到致辞吧,致辞具有“礼仪性”或“仪...
八十大寿宴会主持词 八十大寿宴会主持词  借鉴诗词和散文诗是主持词的一种写作手法。在当下这个社会中,主持人的需求越来越高...
校园迎新春晚会主持词 校园迎新春晚会主持词  主持词已成为各种演出活动和集会中不可或缺的一部分。在当今不断发展的世界,越来...
同桌的你小品台词参考 同桌的你小品台词参考  王小利和小沈阳上场  王小利:儿子,今天,我带你去见一位特别重要的人物。  ...
文艺汇演主持人串词 文艺汇演主持人串词  开场:  萌:尊敬的各位领导,各位来宾。  泓:亲爱的老师们,同学们。大家  ...
年度总结表彰大会主持词 年度总结表彰大会主持词9篇  总结是指社会团体、企业单位和个人在自身的某一时期、某一项目或某些工作告...
小学庆六一儿童节主持词 小学庆六一儿童节主持词(精选5篇)  契合现场环境的主持词能给集会带来双倍的效果。随着社会一步步向前...
经销商大会主持稿 经销商大会主持稿推荐  经销商大会主持稿(一)  尊敬的各位来宾,各位朋友  大家上午好  (8:5...
年会精彩致辞 年会精彩致辞(通用7篇)  在学习、工作乃至生活中,大家对致辞都不陌生吧,致辞具有很强的实用性和针对...
少儿活动主持人主持词 少儿活动主持人主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。我们眼下的社会,主持人参...
晚会主持词开场白 【必备】晚会主持词开场白(通用13篇)  主持词已成为各种演出活动和集会中不可或缺的一部分。在人们越...
六一儿童节鼓励致辞 六一儿童节鼓励致辞(通用20篇)  无论是身处学校还是步入社会,说到致辞,大家肯定都不陌生吧,致辞具...