• NOIP2023模拟13联测34 总结


    NOIP2023模拟13联测34 总结

    比赛过程

    看了一下题,感觉就 T 2 T2 T2 有一点思路。

    T 1 T1 T1 先打一个 30 30 30 分暴力,感觉要分位考虑,想了大概 1 h 1h 1h 就跳了。

    T 2 T2 T2 想到了先求出整个区间的长度乘上包含这个区间的总数再减去重复算的,想了很久,只会相邻的,只好打个暴力,发现线段树超时,加上离散化又挂了,于是调了好久都没调出来。只好跳了

    T 3 T3 T3 赶紧打个暴力

    T 4 T4 T4 检查了前 3 3 3 题代码后没什么时间了,题也没看懂

    题目

    A. origen

    题目大意

    给定 n n n 个整数 a 1 , a 2 , a 3 ⋯ a n a_1,a_2,a_3\cdots a_n a1,a2,a3an ,求
    ∑ i = 1 n ∑ j = i n ( ⊕ k = i j a k ) 2 m o d    998244353 \sum_{i = 1}^n\sum_{j = i}^n(\oplus_{k = i}^ja_k)^2 \mod 998244353 i=1nj=in(k=ijak)2mod998244353
    n ≤ 2 ∗ 1 0 5 , 0 ≤ a i ≤ 2 ∗ 1 0 5 n\le 2 * 10^5 , 0\le a_i \le 2 * 10 ^5 n2105,0ai2105

    思路

    s i = ⊕ j = 1 i a j s_i = \oplus_{j = 1}^i a_j si=j=1iaj ,则原式变为:
    ∑ i = 0 n − 1 ∑ j = 1 n ( s i ⊕ s j ) 2 \sum_{i = 0}^{n - 1} \sum_{j = 1}^n (s_i \oplus s_j)^2 i=0n1j=1n(sisj)2
    按位考虑,一个数可以用二次幂的和来表示。考虑怎么处理平方。

    因为:
    ( ∑ i = 1 n a i ) 2 = ∑ i = 1 i a i 2 + 2 ∑ i = 1 n − 1 ∑ j = i + 1 n a i ∗ a j (\sum_{i = 1}^n a_i)^2 = \sum_{i = 1}^i a_i^2+ 2\sum_{i = 1}^{n - 1}\sum_{j = i +1}^n a_i*a_j (i=1nai)2=i=1iai2+2i=1n1j=i+1naiaj
    把两部分分开处理。

    先处理前面的那项

    i i i 的每一位分开求贡献,当前处理到第 j j j

    设前 i − 1 i - 1 i1 个数这一位为 0 0 0 的数有 s 0 s0 s0 个,为 1 1 1 的数有 s 1 s1 s1

    那么求这一位的贡献

    • 若当前这一位为 1 1 1 2 j ∗ 2 ∗ s 0 2^j*2*s0 2j2s0
    • 若当前这一位为 0 0 0 2 j ∗ 2 ∗ s 1 2^j*2*s1 2j2s1

    然后处理后面的那项

    先枚举两位 j 1 , j 2 j1 , j2 j1,j2

    当前处理到第 i i i

    s u m k , l sum_{k , l} sumk,l 为前面 i − 1 i - 1 i1 个数的第 j 1 j1 j1 位为 k k k ,第 j 2 j2 j2 位为 l l l 的个数

    设第 i i i 个数这两位分别是 x , y x , y x,y

    那么这里的贡献为: 2 ∗ 2 j 1 ∗ 2 j 2 ∗ s u m ! x , ! y 2 *2^{j1} * 2^{j2} *sum_{!x , !y} 22j12j2sum!x,!y

    B.competition

    题目大意

    现在有 n n n 个区间 [ l i , r i ] [l_i , r_i] [li,ri] ,现在问你选取若干的连续的区间的区间并的大小的和。

    思路

    p r e i , j pre_{i , j} prei,j 表示前 i − 1 i - 1 i1 个区间内,包含点 j j j 的最靠右的数是多少。

    可以发现答案就是
    ∑ i = 1 n ( r i − l i + 1 ) ∗ i ∗ ( n − i + 1 ) − p r e i , j ∗ ( n − i + 1 ) \sum_{i = 1}^n (r_i - l_i +1) * i * (n - i + 1) - pre_{i , j} * (n - i +1) i=1n(rili+1)i(ni+1)prei,j(ni+1)
    也就是这个区间被记入答案的次数乘上区间的大小再减去重复的次数

    可以用一棵线段树维护加离散化来维护。

    先统计答案,然后用线段树更新 p r e pre pre

    要卡常

    C. tour

    题目大意

    n n n 个城市,每个城市有一个文化值 v a l i val_i vali

    接下来有两种操作

    • 0 x y

      表示城市 x x x 和城市 y y y 之间建立一条无向边 (保证修建前 x x x y y y 不连通)

    • 1 x y

    ​ 代表有一个人,初始时他的文化值为 0 0 0 ,他会从 x x x 走到 y y y (保证此时 x x x y y y 连通),每走到一个城 市 i i i,他会与这个城市进行文化交流,如果此时他的文化值大于等于 v a l i val_i vali ,那么这次文化交流是 成功的。无论文化交流结果如何,在此之后,他的文化值会加上 v a l i val_i vali 。求出成功的文化交流的次数。

    D.abstract

    题目大意

    定义函数 f ( i , j ) , g ( i , j ) f(i , j) , g(i , j) f(i,j),g(i,j) ,分别表示 i → j i\to j ij 的权值和权值或,想要求出 ∑ i = 1 n ∑ j = 1 n f ( i , j ) g ( i , j ) \sum_{i = 1}^n\sum_{j = 1}^n f(i , j) ^{g(i , j)} i=1nj=1nf(i,j)g(i,j)

    把 $f(i , j) , g(i , j) $ 放到 i → j i\to j ij 的简单路径上的点权和点权或

    输出答案 m o d    111121 \mod 111121 mod111121

    定义: 0 0 = 0 0^0 = 0 00=0

  • 相关阅读:
    经过半年的努力,终于成为了谷歌开发者专家(GDE)
    计算机网络基础导览
    SpringCloud - Spring Cloud Alibaba 之 Seata分布式事务服务;AT事务模式(二十)
    【数据结构】什么是算法
    【计算机视觉】24-Object Detection
    刷题日记1
    9.19 Day 56----搭建Ngin
    Web前端接入Microsoft Azure AI文本翻译
    python使用mysql添加全文索引
    21 | 多线程3
  • 原文地址:https://blog.csdn.net/fzyyyyyyyy/article/details/134277418