20250721
日记
习题
- 第一场
A
比较简单,刚开始想法比较抽象,想用01tri。后来想通了,过了,花了一个上午,大部分时间全花在01tri的代码上了,难绷
B
根据对样例的分析和自行构造,发现如果n>=4,那么答案为Max{a[i]}*n,n=3的情况暴力DFS,n=2直接输出
C
首先,Max{a[i]}*2>sum或者2|sum的情况是无解的
可以发现,最多2次操作就可以解决
对于n=3的情况:
- a[1] = a[2] + a[3],或a[3] = a[1] + a[2],都是一次
- a[2] = a[1] + a[3], 一次{a[1], a[1], 0}, 一次{0, a[3], a[3]}即可;
推广到n更大的情况,可以选择一个尽可能平分a的点p,把序列看成[1, p - 1], [p, p], [p + 1, n]三段,针对构造
E
把偶数位置上的数除了2全部取反,统计0、1、2的数量,记为c0, c1, c2
发现答案为0、1数量差,如果c2 <= abs (c0 - c1),则答案为abs (c0 - c1) - c2,否则为(c2 - abs (c0 - c1)) & 1
G
二分答案,对于每个答案扫一遍
每次扫到需要操作的点就贪心从右端点最右的区间开始用,区间用优先队列维护
扫到左端点就存在优先队列里,维护一个tag,碰到有被使用标记的右端点就把值扣回去,这样就不用写数据结构了
对于区间过期的问题可以直接判断队首是否过期,过期就直接清空。
H
对于每一个串先用栈把“平衡”子序列扫一遍,把无法使用的括号清出来
发现最终的括号序列总是长成这样:。。。。))))((((。。。
用贪心,把右括号最少,左括号最多的放前面,最后再扫一遍即可
D
分类讨论,还没写完,回家继续写

浙公网安备 33010602011771号