【题解】Codeforces Round 861(CF1808)A - E1
我忘记了今天有阳间 CF,所以就开打的很晚,所以只是说一下做法,代码实现....还是算了吧。
但是我也看了,我的思路其他的人都有写,所以这个做法正确性没问题。
A.Lucky Numbers
题目分析:
加不超过 次,一定会有 同时出现的情况,所以直接暴力做没问题。
B.Playing in a Casino
题目分析:
考虑对于每一个数都会与这一列里的其他的数产生贡献,其中与小于它的数产生正的贡献,大于等于它的数产生负的贡献。
所以可以对于每一列排序,然后扫一遍,每次求出当前数产生的贡献就好了。
C.Unlucky Numbers
题目分析:
可以考虑暴力枚举这个数里最大的数位()和最小的数位(),然后只需要判断只使用 内组成的数是否有存在在 内的。
一种做法就是数位 ,分别限制一下上下界或者差分一下判断数量,但是这太麻烦了。
我们其实可以考虑直接用 组成大于等于 的最小的数,如果这个数小于等于 则证明有解。
这个解法很显然是正确的。
D.Petya, Petya, Petr, and Palindromes
题目分析:
显然对于一个区间其的贡献就是对应位置上的数不相同的数量。
可以发现对于某一个位置来说,不同的长度为 的子区间只是让它对称过去对应的数的位置不一样罢了,所以就考虑对于每一个数单独计算贡献。
假设我们可以维护出这个数能对应的区间 ,那么我们的答案就是 这个区间上与这个数不同的数的个数(不是种类),而这个不好求,可以转化为总共 对应的数的个数 - 相同的数的个数。
对于相同的数的个数我们可以对于每一个数维护一个数组,然后直接在数组上二分 对应数组中的哪一段,这一段内的数的数量就是我们要的相同的数。
而对于 来说,肯定随着我们下标的递增而单调不降,所以双指针维护就好了。
注意因为一个数只会对应与它下标奇偶性相同的位置,所以并不能直接以我们得到的区间长度为最终的结果,应该加一些细节。
E1.Minibuses on Venus (easy version)
题目分析:
显然可以想到设 表示前 个数和模 为 的方案数,但是我们好像不大能限制可行方案这个条件。
其实我们的可行方案的条件可以转化为:
也就是说我们可以直接枚举 的值,然后对于 的 显然只有一个值,只需要在 的时候限制这个数必须被插入就好了,但是必须被插入好像不好限制。
其实我们如果反着来,也就是求不可行的方案,即直接限制 一定不能被插入是简单的,只需要每次枚举插入的数的时候跳过 即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2022-03-29 【学习笔记】轻重链剖分
2022-03-29 【学习笔记】Manacher
2022-03-29 【学习笔记】后缀数组