赛时安排
7:50~8:05 看题
8:05~9:10 先去写T2,看了看样例发现它是把字符串分成了多个最短的不回文子串。然后根据这个继续想做法,发现这个子串的开头字母如果下一位与它不同,就直接划分成一段,然后如果相同,就划分到下一个与它不同的地方,因此进行操作。然后实现结束后发现
e
e
d
d
e
e
eeddee
eeddee这个出了问题,然后推得,当你要转移到的下一个位置到结尾是由一个字母组成的,就把这当前的部分划分到它下个相同位置的前面。
9:10~10:30 开始想T3,想到了它是求平均值为x,那么就求一下哪k个商品合起来是x的k倍。然后第一遍写的时候直接写的多重背包,然后运算答案的时候发现有问题。然后想起来这里求出来的答案没有限制商品的个数,然后就想着再把
f
f
f数组多加一维,表示
j
j
j件商品共消耗
i
i
i元的方案数,然后就先手写了写样例的表,然后实现之后发现状态转移有问题,然后就换了好多想法去想如何转移…然后想不出来,就先去写T4
10:30~10:45 看了看T4想到了暴力的写法,按照题目的操作进行排序,然后再
O
(
n
)
O(n)
O(n)扫一遍看是否递增。
10:45~11:15 然后又回头看T2,又想了想转移,发现第二维转移想不出来,就先码了个dfs打出来暴力分。
11:15~11:30 发现T4跑了一下第二个样例出了大锅…然后感觉思路没什么问题…然后一直在找判断那里是不是有问题…
11:30~12:00 想起来T1还没动…然后回头写T1,画了画每一个糖果放进去之后其它糖果放的位置,然后想到了一个想法,每一个糖果放下后如果后续有放在旁边的,那么这一段区间的最终答案可能到达的范围会扩大,那么我找到所有糖果放下后的范围,然后找到其中一定会落在的位置,其它地方用组合数求得,再乘每一个区域的贡献,得到答案。
12:00~12:10 交题
赛后总结
T1
这道题询问的是摆放糖果的方案数,因此与盘子使用的先后没有关系,只与是否使用有关,由此就可以看出这道题要用DP来写。考试的时候留给这道题的时间太少了…然后写的时候又想了想其它的东西,然后第一档的暴力也没有写。
T2
这道题是一部分的模拟加上一点思维。对于每一个字符串只需要判断是否存在以下几种情况就可以。
1.本身就不是一个回文串,则答案就是这一整段。
2.如果该字符串是
a
b
a
b
a
b
a
abababa
abababa或
a
a
a
a
a
aaaaa
aaaaa的类型,则答案为-1
3.找到一个与下一个字符不同的位置pos
显然此时分出的两段中的第一段是不回文的,因此只需判断下一段就可以了。判断方法就和上面分类两个相同。
这道题写的时候根据样例来推的结论,然后思维就被固化了…
T3
这道题的暴力应该用四重循环然后开三维数组来优化也有人用了二维,但我莫得推出来… 表示前i个取了j个元素,和为k的方案数,然后累加答案就行了。接着是正解,因为已知平均值,只需要将每个物品的价值减去x然后令物品的价值和为0就可以了,但是这样写只能过70分,然后接下来是优化。这个优化也需要点思维来想,因为正值的代价求相当于
1
+
2
+
.
.
+
n
1+2+..+n
1+2+..+n,然后负值的代价求相当于
−
(
1
+
2
+
.
.
+
n
)
-(1+2+..+n)
−(1+2+..+n),因此我们可以两边一起处理,然后一起累加答案就可以了。
T4
这道题应该是今天最简单的题了。写这道题的时候,我把题意理解错了,以为每一次的修改与下一次没有影响…于是样例一直过不去。然后在看题中给的那段操作,发现一个显然的性质:它的修改只是将所有奇数位置上的进行排序,然后将所有偶数位置上的进行排序,因此判断操作之后是否能够成功排序就只需要看奇数位置上对应的数是否比偶数位大就好,然后正解就是在此基础上进行优化。我们把在所有偶数位上所对应的数的位置+1,在所有奇数位数上所对应的数的位置-1,然后跑前缀和看是否前缀和只由1,0构成,然后用线段树进行实现就过了。
今天的节奏被T3的那个暴力代码的DP转移给卡住的时间给打乱了,每道题的思维度有需要好多,然后暴力分也没有打满就挂掉了…下次应该先把暴力分打满再思考正解…