A. A Serial Killer
题意:有一个杀人犯,每天选择两个受害者,然后选择其中一个杀掉,剩下的一个人与新选的受害者再次进行上述操。给你每天杀死的对象以及替换的新受害者,让你输出每天受害者的姓名,姓名顺序对答案无影响。
思路:string s1, s2 分别指向两个受害者,每一天check s1与s2,被杀掉的替换新受害者,重复操作即可得到答案
AC代码

B. Sherlock and his girlfriend
题意:给序列 2~n+1 涂色,同时要求每个数和他的质因数的颜色不同
a prime divisor的意思是素因子,当时没有看清,然后wa了
思路: 很明显素数全部填1,其余全部填2
AC代码

C. Molly’s Chemicals
题意:给n个整数,一个整数k, 求有多少个区间的区间和是k的非负整数次幂
思路:观察题目, 1 n 1 0 5 , 1 k 10 , 1 0 9 a i 1 0 9 1 ≤ n ≤ 10^5, 1 ≤ |k| ≤ 10,- 10^9 ≤ ai ≤ 10^9 1n105,1k10,109ai109
所以,推出k的非负整数次幂最大不超过 1 0 14 10^{14} 1014 ,最小不小于 1 0 14 10^{-14} 1014
贪心考虑,k的非负整数次幂最多不超过64(很显然 2 64 2^{64} 264超longlong范围)
所以,这道题目切入点是k的非负整数次幂
枚举k的非负整数次幂,记其为val
val = pre[r] - pre[l - 1]

pre[i]表示前i个数的和,也就是前缀和

考虑到,我们可以枚举pre[l - 1],找pre[r]的个数。
这里要注意一个问题,找到的pre[r]中的r,一定要大于l,所以就可以用一个桶装r,然后upper_bound查找一下,具体代码细节可参考下面代码

AC代码

I. Cloud of Hashtags
题意:给你n个字符串,通过删除操作,得到的n个字符串要满足字典顺序,而且保证n个字符串的长度尽可能得长。对于某一个字符串,删除操作就是删除字符串的某一个后缀。
思路:贪心考虑,删除操作会使得字符串变小。考虑所有可能的n个字符串,我们会发现,第n个字符串 大于等于 第 n - 1个字符串 大于等于 第 n- 2个字符串 …。因为删除操作会使得字符串变小,所以我们就先拿最大的字符串考虑,一旦最大的字符串确定,我们就可以按照贪心策略确定第 n -1个、第n - 2个…字符串。从而证明贪心策略的正确性

技巧:如果一个操作使得某值减小,我们就可以从大到小顺序考虑某个操作
AC代码

J. Alyona and Spreadsheet
题意:给你一个 n m n * m nm的矩阵,k次询问,每次询问给你两个值l,r(l <= r)。
问m列中,是否有一列从行l到行r的元素大小呈不递减顺序。如果存在,输出Yes,否则输出No
思路 1 k 100 000 1 ≤ k ≤ 100 000 1k100000,这提醒我们,查询操作要么O(1)要么O(log)
O(1)一般是提前处理好,O(log)是线段树维护(前后询问有关系)。由于K次询问前后关系不大,我们就以O(1)方法作为切入点。对于每一次询问,给你两个值l,r。
怎样O(1)check有无呢?
稍微思考一下,我们就可以知道,如果我们知道每一行的最大延伸位置,那我们就可以O(1)判断此位置与r的关系,从而得到答案

问题转化为求每一行的最大延伸位置
对于每一列,我们从下往上更新

ans[i]表示i延伸的最大位置
初始化 ans[i] = i;
if val[i] <= val[i + 1] ans[i] = ans[i + 1]

具体代码细节,可参考下面代码
AC代码

K. Game of Credit Cards
题意:有A,B两个人,两个人手上各有n张牌,牌上有数字,表示其大小。
A按给的牌顺序出牌,B不按顺序出牌(为了达成自己的目标出牌)。如果一个人出的牌大于另外一个人的,那么输的受到惩罚。相同则两个人都不受罚。
问B不受罚的最大次数以及B让A受罚的最大次数?
思路
总的考虑,由于B出牌顺序随意,那我们就可以假设A出牌的顺序是非递减顺序,即从小到大顺序出牌
考虑第一个小问题
贪心考虑,要尽量B不受罚,那么每次A出一张牌,记为a。那么B应该从其牌堆里面找到一个大于等于a的最小数,然后把该牌从牌堆剔除。不断模拟这个过程
考虑第二个小问题
贪心考虑,要尽量B不受罚,那么每次A出一张牌,记为a。那么B应该从其牌堆里面找到一个大于a的最小数,然后把该牌从牌堆剔除。不断模拟这个过程

注意:如果A出某一张牌时,B出任何牌都无意义时,那么后面A在出什么牌,B出的牌就无意义了。(因为A后面出的牌越来越大)

AC代码

L. Shell Game
题意:有3个碗(0,1,2),1个球。球放在其中一个碗里,第1次操作,交换碗0与碗1,第2次操作,交换碗1与碗2…
(第奇数次操作,交换碗0与碗1,第偶次操作,交换碗1与碗2)
告诉n次操作后球在哪一个碗,问你初始时刻球放在哪一个碗?
思路:画几个图,发现有规律。每6次操作一个循环,然后check即可

AC代码