题目链接:https://codeforces.ml/contest/1335/problem/E2
div3的E题其实并不难。
(57min的时候做出E1,并且可以过E2,结果1h33min时才交o(╥﹏╥)o,并且D取错题了,导致小号勉强上蓝)
首先像这种可以直接枚举元素大小的,有一个经典模型,就是像选择客栈那样的前缀和。
直接枚举元素大小。
而这题还要有两边的枚举。
实际上,对于两边元素必须相同,且个数相等这个约束就帮了大忙。
可以直接用链表,把相同元素左右相连。(写法类似链式前向星)
然后枚举元素,将其最左最右指针同时跳,保证两边个数,元素都相同。
然后再枚举中间的元素,用前缀和直接求出中间相同元素的最大数量为多少。
再加上两边跳过的元素数量即可。
而这种方法巧又巧在时间方面。
(一开始算错时间,后来算对了结果看错了数据范围,导致迟A了那么久)
因为实际上指针总共只会跳\(n/2\)次,所以带上枚举中间元素的k。
总时间为:\(O(nk)\)
也就可以通过了。
而这种时间的优越性在于每次枚举的指针都不重复。
利用双链表的形式免去了浪费时间的暴力枚举元素。
代码:
#include
#include
#include
#include
#include
#include
#include
话说我还真不会只能过E1,但过不了E2的做法