时间安排
1
:
50
−
2
:
40
1:50-2:40
1:50−2:40 先把所有题的题面都读了一遍,T2,T4最耗时间了,我一直在找T4的u和v合并以后的新的瓶子是在u上还是在v上,我看了看大样例,每一个瓶子的最后出现的位置都是v,所以我以为是u和v合并在u(即v倒到u里面),直到我看见有一组数据是第i个合并操作是i和i+1,我直接懵了,因为如果是v倒到u里面,那么这n-1个操作就不可能将这n个瓶子合并成一个,如果是u倒到v里面,大样例又无法解释,就很离谱。
2
:
40
−
3
:
20
2:40-3:20
2:40−3:20 把T1写了,其实不难,先对01串做一个前缀和,考虑对于每一个
i
(
2
i
)
i(2^i)
i(2i),其所能影响到的是一段区间,所以对于每一个
i
(
i
<
n
)
i(i < n)
i(i<n),都可以求出
s
[
i
]
(
i
∈
2
k
)
s[i](i \in 2^k)
s[i](i∈2k),如果和当前的不同,就代表错误的位置的下标一定在二进制的第
i
i
i 位为1,再用一个sta存一下,最后翻转
s
[
s
t
a
]
s[sta]
s[sta] 的值后输出即可。
3
:
20
−
4
:
00
3:20-4:00
3:20−4:00 在码T3,首先T3可以简化为构造一个序列
a
[
i
]
a[i]
a[i],使得对于每一个
a
[
i
]
a[i]
a[i] 来说,
1
1
1 到
i
−
1
i-1
i−1 中比
a
[
i
]
a[i]
a[i] 小的数和
i
+
1
i+1
i+1 到
n
n
n 中比
a
[
i
]
a[i]
a[i] 小的数的个数之差小于等于1,所以我就先写了一个dfs,离谱的是我打出来的序列是
1
,
2
,
2
,
4
,
4
,
8
,
8
,
16
,
16
,
32
1,2,2,4,4,8,8,16,16,32
1,2,2,4,4,8,8,16,16,32,我一看这规律这么明显的吗,不就是
2
⌊
n
/
2
⌋
2^{\lfloor n/2 \rfloor}
2⌊n/2⌋ 就写了一个快速幂,然后就在第二个样例挂了,当时我以为是规律没找对,就去看T4了。
4
:
00
−
4
:
40
4:00-4:40
4:00−4:40 我硬着头皮写了一个(我以为的)10分代码,但是我一直不明白u和v是怎么合并的我觉得大样例是对的,所以就写了一个把v倒到u里的代码。
4
:
40
−
5
:
30
4:40-5:30
4:40−5:30 自闭的模拟题,看到题我头都是大的,想的是对于售卖池维护两个set,一个维护值,一个维护前缀和,对于每一次操作,用lower_bound二分查找,然后删掉之前的值,对于1,2操作依次插入删除即可,但是我的lower_bound的等于和大于的情况没处理好,然后样例还RE,最后也没调出来。
总结
模拟题是一个大问题,细节太多,调的太自闭(这也是我为什么最后写T2),然后就是致我那写错的dfs和30分,还有万恶的T4题面的出题人,恶心了我半个多小时,一个字一个字地扣题面。