Codeforces Round #657 (Div. 2)
A. Acacius and String
题意: 给定一个字符串,字符串是由小写字符和?构成,长度为n,n<=50。问往字符串里面填字符后,新的字符串包含“abacaba”作为子串,且该子串的出现次数唯一。
题解: 因为n的长度非常小,那么我直接去枚举位置i作为字符串的起点,然后开始填字符,尽可能填成“abacaba”,如果能够填为“abacaba”,那么枚举后面的位置是否还会出现“abacaba”,如果会的,那么该位置不合法,如何合法直接打印。
代码:
B. Dubious Cyrpto
题意: 给出三个正整数 l,r,m,判断在区间 [l,r]内是否有 a,b,c满足存在正整数 n,使得n⋅a+b−c=m 。
题解: 暴力。枚举a,然后就能够确定n的范围为m/a - 1 ~ m/a + 1,然后判断b和c是否存在,如果存在那么直接打印。
代码:
C. Choosing flowers
题意: 现在要买n多花,每朵花如果第一次买,得到的快乐值为ai,如果从第二次买,每买一次,得到的快乐值就为bi。现在问如何购买这n朵花能够使得快乐值最大。
题解: 二分+枚举。首先,我们知道如果我们选择一个比较小的b,那么不如选择一个比较大的a。因此我们可以按照a排序,然后枚举选择哪个b,然后二分找到大于等于它的a,从这个a开始更大的a都需要选择,这个维护一个后缀和即可。其他的我们就都选择b,因为如果选择更小的不如选择当前的b更优。
代码: