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的情况:

  1. a[1] = a[2] + a[3],或a[3] = a[1] + a[2],都是一次
  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

分类讨论,还没写完,回家继续写

posted @ 2025-07-21 22:00  姜树  阅读(9)  评论(0)    收藏  举报