NOIP2023模拟13联测34 总结

NOIP2023模拟13联测34 总结

比赛过程

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

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

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

T3 赶紧打个暴力

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

题目

A. origen

题目大意

给定 n 个整数 a1,a2,a3an ,求

i=1nj=in(k=ijak)2mod998244353

n2105,0ai2105

思路

si=j=1iaj ,则原式变为:

i=0n1j=1n(sisj)2

按位考虑,一个数可以用二次幂的和来表示。考虑怎么处理平方。

因为:

(i=1nai)2=i=1iai2+2i=1n1j=i+1naiaj

把两部分分开处理。

先处理前面的那项

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

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

那么求这一位的贡献

  • 若当前这一位为 12j2s0
  • 若当前这一位为 02j2s1

然后处理后面的那项

先枚举两位 j1,j2

当前处理到第 i

sumk,l 为前面 i1 个数的第 j1 位为 k ,第 j2 位为 l 的个数

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

那么这里的贡献为:22j12j2sum!x,!y

B.competition

题目大意

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

思路

prei,j 表示前 i1 个区间内,包含点 j 的最靠右的数是多少。

可以发现答案就是

i=1n(rili+1)i(ni+1)prei,j(ni+1)

也就是这个区间被记入答案的次数乘上区间的大小再减去重复的次数

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

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

要卡常

C. tour

题目大意

n 个城市,每个城市有一个文化值 vali

接下来有两种操作

  • 0 x y

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

  • 1 x y

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

D.abstract

题目大意

定义函数 f(i,j),g(i,j) ,分别表示 ij 的权值和权值或,想要求出 i=1nj=1nf(i,j)g(i,j)

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

输出答案 mod111121

定义:00=0

posted @   2020fengziyang  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示