2023NOIP A层联测32

文章目录

  • 2023NOIP A层联测32
    • A flandre
    • B.meirin
    • C.sakuya
    • D. 红楼 ~ Eastern Dream
    • 总结

A flandre

nnn 种烟花,每种烟花有两个参数 a , ba , bab,你要构造一种燃放顺序,使得 bbb 的和最大, bbb 会改变,具体来说:设 iii jjj 前燃放,那么。

  • a i< a ja_i < a_j ai<aj ,则 b j+k→ b jb_j +k \to b_j bj+kbj
  • a i= a ja_i = a_j ai=aj b jb_j bj 不变
  • a i> a ja_i >a_j ai>aj b j−k→ b jb_j – k \to b_j bjkbj

1 ≤ n ≤ 1 06 1\le n \le 10^61n106

这个题考场就想到了正解。思考一下,最优方案满足一个性质,将 aaa 从小到大排序,依次燃放。暴力求答案,然后选出最优的方案就好了,可惜有一个变量没有给初始值挂了 707070 分,关键是大样例还过了。

B.meirin

给定两个序列 a , ba , ba,b

qqq 次操作,每次把 bbb [ l , r ][l , r][l,r] 的每个值加上 kkk ,每次操作后查询:
∑ l=1n ∑ r=ln( ∑ i=lr a i)×( ∑ i=lr b i) m o d    (1 0 9+7)\sum _{l = 1} ^n \sum_{r = l}^n(\sum_{i= l}^r a_i) \times (\sum_{i= l}^r b_i) \mod (10^9 + 7) l=1nr=ln(i=lrai)×(i=lrbi)mod(109+7)
n , q ≤ 5 × 1 05 n , q \le 5 \times 10^5n,q5×105

因为修改的是 bbb 的值,我们就可以考虑把 [ l , r ][l , r][l,r] 里面的值对答案的影响算出来。

s u m 1i sum1_isum1i i × ai i \times a_ii×ai 的前缀和, s u m 2i sum2_isum2i 就是 ( n − i + 1 ) × ai (n – i + 1) \times a_i(ni+1)×ai 的前缀和。

每个 bi b_ibi 的贡献就是 s u m 1 i − 1× ( n − i + 1 ) + s u m 2 i + 1× i + ai× i × ( n − i + 1 )sum1_{i – 1}\times (n – i + 1) +sum2_{i + 1} \times i +a_i \times i \times(n – i + 1)sum1i1×(ni+1)+sum2i+1×i+ai×i×(ni+1)

用一个前缀和维护一下这个值就可以做到 O ( 1 )O(1)O(1) 修改。

考场最后 30 m i n30 min30min 才想到正解,但是码了 15 m i n15min15min 发现只能过小样例过不了大样例,考后才发现是快写打错了。

C.sakuya

nnn 个房间构成了一棵树,边有边权。树上有 mmm 个特殊的房间,求走完这些房间的期望。

每次修改会使得连接 xxx 的所有边加上 kkk

n , m , q ≤ 5 × 1 05 n , m , q \le 5 \times 10^5n,m,q5×105

考虑修改一条边的影响,就是这条边两端的特殊房间的数量的乘积。

先把答案求出来,每次修改的时候就是把答案加上这个影响乘上 kkk 就好了。

D. 红楼 ~ Eastern Dream

给出一个长度为 nnn 的序列 aaa ,有 mmm 次操作,格式如下:

  • 1,x,y,k1, x , y , k 1,x,y,k 对于所有满足 (i−1) m o d    x≤y(i – 1) \mod x \le y (i1)modxyii i ,将 a ia_i ai 加上 kk k
  • 2,l,r2, l , r 2,l,r ∑ i=1r a i\sum_{i= 1}^r a_i i=1rai

n , m ≤ 2 ≤ 1 05 n , m \le 2 \le 10^5n,m2105

根号分治。维护两个数组 v i , j, v si v_{i , j} , vs_ivi,j,vsi ,表示对于所有 ( x − 1 ) mod    i = j(x – 1) \mod i = j(x1)modi=j xxx ax a_xax 要加上的值, $vs_{i , j} $ 是 v i , j v _{i , j}vi,j 的前缀和,即对于所有 ( x − 1 ) mod    i ≤ j(x – 1) \mod i \le j(x1)modij xxx ax a_xax 要加上的值。

x ≤ n x\le \sqrt nxn 可以直接修改。

x ≥ n x\ge \sqrt nxn 需要用分块维护差分

总结

期望得分: 100 + 100 + 0 + 25 = 225100 +100 + 0 +25 = 225100+100+0+25=225

实际得分: 70 + 30 + 0 + 25 = 11570 + 30 + 0 + 25 = 11570+30+0+25=115

这次本来是一个信心场,但还是失误了。两个题想到正解都挂了,一个是忘记设初值,一个是快写打错,就是自己的代码实现能力不足了。而且码完一个题可以考虑先检查一小会。 T 3T3T3 还没有拿到暴力分,遇到这种自己不熟练的题目,可以打打暴力,而不是直接就跳了。