EDU-CFR-53-Div.2解题报告
A. Diverse Substring
定义一个字符串为多变的,当且仅当字符串中没有一个字符的出现次数严格大于 。给定一个只由小写字母构成的字符串,问是否能找出一个多变的字串,如果能,任意输出一个。
只有两个不同字符的字符串时多变的,所以只要给定的字符串中包含至少两个字符就一定可以,输出相邻两个不同字符即可。
B. Vasya and Books
有一摞书,从上到下依次编号为 ,现在 Vasya 想把它们分 次挪到别的地方,每次他会告诉你他想挪的书的编号,如果这本书还没有被挪动,他将会把这本书以上的书(包括这本书)一块搬走。对于每次挪动,回答他搬了多少本书(没搬输出 0)。
开一个桶记录每一本书的位置,记录当前搬到那个位置了,每搬一次就更新一下,减一下即可。
C. Vasya and Robot
有一个机器人,初始在 点,给你一个长度为 的操作序列,每次让机器人向上、下、左、右中的一个方向走一步,你需要修改连续的一段操作序列(这一段中的操作不必全部都修改),使它最终走到 点,问修改的操作序列的最短长度。(不是很严谨,序列长度的详细定义见原题面)
如果修改一个长度为 的序列可以使它走到终点,那么一定存在一种长度为 的方案也能走到终点(大不了就加一个空修改),于是我们发现这是可以二分的。二分最终修改的长度 ,对于一个长度,我们需要 判断是否可行,怎么判断呢?对于每一段长度为 的修改,判断不考虑这段修改后机器人会走到哪个位置,再从这个位置开始,判断随便走 步能否走到终点(反正允许修改这一段,那想怎么改就怎么改)。
实现上,我们维护一个走的位置的前缀和和后缀和,就可以 判断去除这段修改后机器人会走到那个位置,然后再考虑一些细节问题即可。
D. Berland Fair
~~有一个人前来买东西。~~Polycarp 带了 元钱,去逛商铺。有 家商铺顺时针排成一圈,编号 ,第 个商铺卖一种价格为 的商品(数量有无限个)。Polycarp 从一号商铺开始,只要钱足够,就买一件商品,否则跳过这家店,直到他一个商品也买不了为止,问他一共会买多少件商品。
先算出来买一圈要花多少钱,让他买尽可能多的圈。为什么他买不了下一圈了呢?一定是到某一个商铺是他买不起了。现在买不起,以后也不可能买的起,于是直接把这个商铺删掉,不考虑。于是我们暴力跑一圈,看看是哪些商铺买不起,把它们都删掉,删完后再让他转圈,知道所有的商品全都被删完为止。由于每一次至少删掉一个商品,最多删 次,每次 ,总时间复杂度为 。(别问我为什么能过 ,我也不知道)(经过同学推导,复杂度为 )