2023NOIP A层联测32

2023NOIP A层联测32

文章目录

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

A flandre

n n n 种烟花,每种烟花有两个参数 a , b a , b ab,你要构造一种燃放顺序,使得 b b b 的和最大, b b b 会改变,具体来说:设 i i i j j j 前燃放,那么。

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

1 ≤ n ≤ 1 0 6 1\le n \le 10^6 1n106

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

B.meirin

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

q q q 次操作,每次把 b b b [ l , r ] [l , r] [l,r] 的每个值加上 k k k ,每次操作后查询:
∑ l = 1 n ∑ r = l n ( ∑ i = l r a i ) × ( ∑ i = l r 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 0 5 n , q \le 5 \times 10^5 n,q5×105

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

s u m 1 i sum1_i sum1i i × a i i \times a_i i×ai 的前缀和, s u m 2 i sum2_i sum2i 就是 ( n − i + 1 ) × a i (n - i + 1) \times a_i (ni+1)×ai 的前缀和。

每个 b i b_i bi 的贡献就是 s u m 1 i − 1 × ( n − i + 1 ) + s u m 2 i + 1 × i + a i × 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 n 30 min 30min 才想到正解,但是码了 15 m i n 15min 15min 发现只能过小样例过不了大样例,考后才发现是快写打错了。

C.sakuya

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

每次修改会使得连接 x x x 的所有边加上 k k k

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

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

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

D. 红楼 ~ Eastern Dream

给出一个长度为 n n n 的序列 a a a ,有 m m m 次操作,格式如下:

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

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

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

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

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

总结

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

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

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

你可能感兴趣的:(总结,算法,考试总结,noip模拟)