Educational Codeforces Round 99(A~E)
A.Strange Functions
题意:定义一个数 的翻转
为:将其从低位到高位写成一个新数并去掉前导零。求对于所有的
,
的取值有多少种。
思路:相当于把x的后缀0给去除,所以有多少种那么就看这个数有多少位就可以了

B.Jumps
题意:
你当前站在数轴的原点 0 处,你要移动到数轴上的一个正整数点 x 处。
假如你当前的位置是 y ,正在进行第 k 次操作,你可以做出以下两种移动:
移动到位置 y + k
移动到位置 y-1
试求移动到点 x 的最小步数。
思路:首先容易想到一直执行第一个操作,如果正好跳到x那么直接输出答案,如果跳远了再一步一步倒退,但是这是不正确的,我们考虑把其中某些步地换成第二个操作
1 + 2 + 3 + 4 + 5 +... + k = sum
-1 + 2 + 3 + 4 + 5 + ... + k = sum - 2
1 + -1 + 3 + 4 + 5 + ... + k = sum - 3
可以发现,如果把第k步替换成第二种操作,那么对答案将会减少k + 1个贡献,因此判断sum与最后答案的差值即可,如果差一,那么最后需要倒退一步,输出 k + 1,其余输出k即可

C.Ping-pong
题意:
Alice 和 Bob 在玩乒乓球。
在一轮比赛中,发球的人开始比赛。发球员击球,接球员回球。此后,发球员和接球员必须交替击球,直到其中一方不击球。不击球的一方输掉这轮比赛,获胜方在下一轮比赛开始发球。由 Alice 开始第一轮比赛。
Alice 有 xx 点体力, Bob 有 yy 点体力,每次击球会消耗 1 点体力。如果体力不足则不能击球。每轮比赛开始的一方如果有体力必须发球。如果两人都没有体力则游戏结束。
Alice 和 Bob 都采取最优策略进行游戏。他们希望首先最大化自己获胜的场数,其次最小化对方获胜的场数。
计算 Alice 和 Bob 获胜的场数。
思路:手摸一下a的体力大于b的体力,相等,小于三种情况发现,第一个输出x - 1, 第二个输出y就可以了,然后大胆交一发就过了
首先,如果双方都要求胜场最多,那么一定是自己的所有发球对手都不接,那么在此情况下,当a的体力还剩下1的时候,b要a赢得少一些,那么就打回去,而a接不了,所以a赢x - 1次,b赢y次

D.Sequence and Swaps
题意:给出一个序列和 一个,每次可以把序列中的一个大于
的数与
交换,问最少操作多少次使得整个序列升序排序,如果不能输出
-1
。
思路:如果有且
,那么就需要将
与
交换,那么可以发现,如果要操作后序列任然不降,那么还需要满足
,那么递推回去之后发现,对于每一个满足
且
都是要替换的,所以每次替换后检查当前序列是否满足条件就可以了

E.Four Points
题意:在二维平面给出四个点,移动其中的点,求让这四个点成为一个边平行于轴与
轴的正方形的最小步数(边长可以为0)
思路:4个点全排列枚举所有组合,设左上、右上,左下,右下的点分别为,
,
,
,先讨论
坐标的情况,
坐标同理
假设最终正方形左边两点的横坐标为,右边两点的横坐标为
,那么四个点移动的代价为
,那么如果有
,那么
与
在横坐标上的代价是最小的,代价为
(两点间横坐标的距离),
同理,那么此时边长就是
同时根据定义域也有一个取值范围,纵坐标同理,边长为
那么现在来讨论和
取值,如果二者有交集,那么就可以取到这个交集中的数,让答案为
+ ;如果二者不存在交集,那么就有一个取不到上述所说的最小值,如果离开这个最小值的范围一个单位,那么就会产生两个单位的代价,因为两个点都需要移出这个范围,最后根据这些实现代码即可

左图为最小值,右图为没有交集而产生的2倍代价