跳转至

The 2020 ICPC Asia Macau Regional Contest

排名 当场过题数 至今过题数 总题数
3/51 8 10 12

A

solved by TYB

题意

给出序列\(\{a_n\}\)​,对所有\(n\)​的排列\(p\)​,求\(\frac{1}{n!}\sum_p\sum_{i=1}^n\Pi_{j=i}^{n}a_{p_j}\)​,结果对\(998244353\)​取模。

\(n\le10^5\)

题解

考虑对每个长度为\(i\)的后缀积算出其贡献,那么最后答案的式子就是\(Ans=\frac{1}{n!}\sum_{i=1}^ni!(n-i)!f_i\),其中\(f_i\)表示从\(a\)中选出\(i\)个不重复的数的乘积的和,那么只需要求出\(f\)。考虑生成函数,\(f_i\)就是\(\Pi_{i=1}^n(1+a_ix)\)这个多项式的\(i\)次项系数,直接分治NTT即可。

\(\mathcal{O}(n\log^2n)\)

B

upsolved by

题意

题解

C

solved by YZW

题意

给出 \(n\) 个数,将其分为两个集合,使得两个集合内任意两个数的异或和最小值最大。

题解

似乎是擦边假做法。按异或边权从小到大枚举加边(Trie 经典套路),判断当前是否仍为二分图,出现奇环时的权值减一即为答案。并且可以通过带权并查集的奇偶性分配集合。复杂度不会证,但是感性理解理解感觉挺小的,但是还是不会证,所以为什么能 AC 呢?

D

solved by JLK

题意

原批模拟题,略

题解

E

solved by JLK

题意

\(n\)​个点\((i,h_i)\)​以及\((0,0),(n+1,0)\)​。相邻的点用折线相连,形成山的形状。在\(n\)​个点上各拍了一个照片,照片是以拍照点为中心,横\(2W\)​纵\(2H\)​的矩形。对于每个\(k=1,2,\dots,n\),要选出\(k\)​张照片,使得照到山的面积的并集最大。求每个最大面积。

\(1 \le n \le 200,1 \le W \le 5,1 \le H,h_i \le 10^4\)

题解

看到\(W\)很小,很容易想到状压。

\(dp_{i,j,S}\)​表示前\(i\)​个点,选了\(j\)​​张照片,前9个点的选照片情况为\(S\)​,的最大面积。

对于确定的\(i,S\),枚举前后\(W\)列,检查前面几个照片的情况,求出选上\(i\)的照片新增的面积即可。

\(j\)实际上和\(i,S\)独立,对于\(i,S\)算出面积后再枚举\(j\)转移即可。

\(O(n^22^9)\)

F

solved by YZW

题意

构造 \(n\) 个点的无向图,要求每个点度为 \(d\),并且恰好有 \(c\) 个联通块。

题解

拍脑袋的构造,しかし多くの corner case がある。

G

solved by TYB

题意

给出长度为\(n\)的序列\(a\)\(m\)次操作,每次给出\(k\),分为以下两种:

\(\bullet\)\(k\)加到序列末尾。

\(\bullet\) 两人进行以下游戏:将一个棋子放在序列第\(k\)​个位置,每次将其移到某个\(k'\)​,满足\(k<k'\)​且\(popcount(a_k\bigoplus a_{k'})\le1\)​,无法移动的玩家输,输出先手还是后手获胜。

\(n,m\le2\times10^5,0\le a_i\le 255\),且对于所有操作\(1\)\(0\le k\le 255\)

题解

重要结论:对于某个\(k\),若存在\(k'>k\)\(a_{k'}=a_k\),则在\(k\)这个位置开始游戏先手必胜。证明考虑\(a_k\)最后一次出现的位置\(p\),若从\(p\)开始先手必胜,也就是存在某个\(p'>p\),从\(p\)可以跳到\(p'\),且从\(p'\)开始游戏先手必败,那么对于\(a_k\)之前出现的位置,也可以跳到\(p'\);若从\(p\)开始先手必败,那么对于\(a_k\)之前出现的位置可以跳到\(p\)​。有了这个结论后,有效的位置只有每种数最后一次出现的位置,只需要在每次询问的时候对这些位置求一下即可。

时间复杂度\(\mathcal{O}(255\log {255}\times m)\)​。

H

upsolved by

题意

题解

I

upsolved by TYB

题意

初始序列为空,然后进行\(m\)次操作,每次为以下两种之一:

\(\bullet\) ADD a b:在序列末尾添加一个数\(a\),其价值为\(b\)

\(\bullet\) DEL:删除序列末尾的数。

每次操作后,设当前序列所有数的异或和为\(s\),从中选出若干个数,使他们的异或和也为\(s\),且价值总和最小,求这个最小价值。

\(0\le a<2^{14},m\le40000\)​,空间限制\(8\)MB​。​

题解

操作删除均在末尾进行,所以可以建出操作树,这样就有了一个时空复杂度均为\(\mathcal{O}(am)\)​的做法:\(f[S]\)​表示当前数异或出\(S\)​这个数的最小价值,在每个节点记录下当前的\(f\)​数组,递归完一个儿子后暴力改回来。但去掉某个数之后无法令\(f\)​回撤,空间无法达到题目要求。考虑进行轻重链剖分,每个节点到根节点的路径上轻边的条数不超过\(\log m\)​,于是可以只记录下每条轻链的开头的父亲处的状态,在dfs时先访问轻儿子即可,空间复杂度降为\(\mathcal{O}(a\log m)\)​。

J

solved by JLK

题意

\(n\)个点排成一列,每个点有颜色\(c_i\)和权值\(v_i\)​的物品。\(m\)个操作:

1:单点修改颜色和权值。

2:询问。

从一个点\(s\)出发,往右走收集物品,但是同色的物品只能拿一个,而且跳过的物品不能超过\(k\)个。问最大权值。

\(1 \le n,m \le 2 \times 10^5,1 \le c_i \le n,1 \le v_i \le 10^9,0 \le k \le 10\)

题解

显然肯定是尽可能走到最右边。权值最大,就是对于相同颜色的物品,只取一个最大权值的。

注意到\(k\)很小,考虑暴力跳。

定义\(nxt_i\)​为\(i\)​点右边第一个颜色相同的点,用线段树维护区间最小\(nxt\)

那么跳的时候相当于是找到一个最右边的\(x\),使得\([s,x]\)区间的\(nxt_i\)最小值为\(x+1\)(也可能直接跳到末尾了)。

可以在线段树上二分。找到一个\(x\)之后把当前冲突的那个点的\(nxt\)改成INF,就可以找下一个,最后恢复即可。

\(O(nklogn)\)

K

upsolved by JLK

题意

\(n\)个长\(w\)\(h\)的广告,第\(i\)个广告的左下角为\((x_i,y_i)\),要求在\([l_i,r_i]\)时间内一直挂上。在任何一个时刻,挂上的广告不能有任何重叠。现在要选一些广告挂上。

另外有\(m\)​个要求,\(a_i,b_i\)两个广告不能都不挂。求方案或判无解。

\(1 \le n \le 5\times 10^5,1 \le w,h,x_i,y_i,l_i,r_i \le 2000,1 \le m \le 10^6\)

题解

很显然的2-sat问题,但是需要优化,因为边数是\(O(n^2+m)\)级别的。

首先要求出不能同时挂上的广告,可以通过bitset维护每个点x坐标相交,y坐标相交,时间相交的广告状态,把三种情况与一下就是冲突的广告。

现在知道边的情况了,要优化2-sat。这里需要使用Kosaraju算法求强连通分量。由于过程中只需要遍历没有遍历过的点,所以可以用bitset加速,每次把边的bitset和没遍历过的点的bitset与一下,找到第一个即可。可以使用bitset的_Find_first函数。

\(O(\frac {n^2}w+m)\)

注意,每次必须用一个tmp的bitset存下需要进行运算的bitset,然后一步一步来执行运算,不能直接用现成的bitset运算,否则会MLE。(大概是因为每次运算系统重新开了一个bitset来存)

L

solved by YZW

题意

签到,略。

题解

见上。

记录

YZW过L(0:11)。

JLK写D,WA一发后AC(0:48)。TYB和YZW讨论A。

TYB写A,JLK和YZW讨论E,发现YZW一开始读错题了,其实可做。

TYB过A(1:10),JLK写E。

写完没过样例,YZW说F好写,先写F。

随后F WA两次,JLK改对了E(1:56),接着YZW改对了F(1:57)。

JLK写J,WA了一次,对拍了一下又TLE,换TYB写G。

JLK改对了J(3:31),然后TYB过了G(3:36)。

YZW开始搞C,JLK和TYB讨论BHK,没有什么进展。

YZW过了C(4:31),然后下班。

总结

JLK:这场先开了几个没人写的题,比较成功。还是应该多看题,少看榜。

Dirt

D(-1)

F(-2)

J(-2)