赛时安排
7:40~7:50 读题
8:00~8:40 想了想决定先写题面简洁的T3。手推了一下样例,发现将它按从大到小排序之后,只需要将第
i
i
i位到
i
+
a
[
i
]
−
1
i+a[i]-1
i+a[i]−1位分为一组贪心就能保证最优,然后到后面出现
i
+
a
[
i
]
−
1
>
n
i+a[i]-1>n
i+a[i]−1>n的情况的话,就把它插到前面队伍中人数最少的里面就可以了。
9:00~10:30 看了看T2,推了推样例,发现求得答案只与前面的长为
m
m
m的字符串有关,然后只需要找到其中前缀和后缀相同并且相连或者重叠,如果不相连或重叠或者前后缀不相同的话,答案就是
(
n
−
1
)
∗
m
(n-1)*m
(n−1)∗m,然后过了样例,但交上去之后评测只有50分,第二个大样例挂了…然后先去写下一题。
10:30~11:30 看了看前两个操作,想到了用bitset来做,将所有数字按出现的顺序放在二进制位置上,然后集合B存下来这些数之后,如果是并的操作,就将
A
∣
B
A|B
A∣B,如果是交,就KaTeX parse error: Expected 'EOF', got '&' at position 2: A&̲B。接着就开始查错…手推了一下到错误的地方,然后打了输出了一下那个位置B上存有的数字…发现比样例少了…找了好半天没找出来哪里错…自闭了。
11:30~12:00 T4还没动…想了想也快没时间了,还是去调T2…然后跑了一下大样例,发现
n
n
n和
m
m
m没有开
l
o
n
g
l
o
n
g
long long
longlong,然后开了之后发现答案还是有问题…想不出来哪里错了…
12:00~12:10 交题。
赛后总结
T1
当时考场上一直挂掉的原因…我用 b ∣ = ( 1 < < p o s [ i ] ) b|=(1<<pos[i]) b∣=(1<<pos[i])时,没有想到 1 < < p o s [ i ] 1<<pos[i] 1<<pos[i]的大小,然后导致后面这个东西的大小太大了,结果就出了错。接着得知,bitset也可以和vector一样直接修改下标。虽然样例过了…但是map的常数太大,然后全T了…接着是正解。它不需要任何数据结构…只需要加一个时间戳就可以了,如果当前位置的时间戳与取并的时间相同,就代表它能够存在A中,然后对于加减操作,就是维护一个懒标记,然后在计算的时候统计这个影响就行了。
T2
这道题的正解思路是找循环节,kmp处理就好了…当时想的方向出了亿点点的小问题…
T3
这道题当时写的贪心,被题目的额外数据给卡了十分,看了之后想了想,贪心能水这么多分确实也挺奇迹。然后看正解,这道题可以看出是要从局部最优解转化为整体最优解,因此就可以想到DP的思路了。
T4
To be continued…