跳转至

2019 ICPC Asia-East Continent Final

排名 当场过题数 至今过题数 总题数
24/? 6 8 13

A

solved by YZW

题意

暴力的签到。

题解

略。

B

upsolved by YZW

题意

题解

C

solved by YZW

题意

定义 \(f^2 = f * f, f^n = f * f^{n-1}\),给出 \(g\) 的前 \(n\) 项与正整数 \(k\),在模 \(998244353\) 意义下求 \(f\) 满足 \(f^k=g\)

保证 \(g(1)=1\)\(n\leq 10^5\)

题解

实际上只需要维护 \(f,f^2,\dots,f^{\log n}\),组合数搞搞,\(g(n)\) 减去 \(<n\) 项对应 \(f^k(n)\) 的贡献再除以 \(k\) 就是 \(f(n)\) 了。

注意转移顺序,不然会变成傻逼。

\(O(n\log^2 n)\)

D

**upsolved by **

题意

题解

E

solved by JLK

题意

\(n\)个点\(m\)条边的有向图,边有流量,这个图由\(k\)条从\(1\)\(n\)的相同长度的路径组成。做若干次操作,每次可以把一条正数流量的边的一个流量转移到另一条边。求达到最大的最大流的情况下,最少的操作次数。

\(2 \le n \le 10^5,1 \le m \le 10^5\)

题解

首先把这些路径找出来。

最大流肯定是把每条路径上的边的流量尽可能变成一样的。最大的最大流数值实际上可以除一下算出来。

一次操作就是把大的转移到小的,不妨只计算把小的增加的次数。假设把一条路径上的流量都变成\(a\),那么代价就是\(\sum\max\{0,a-c_i\}\)。随着\(a\)增加,每次的操作增量也不断增加,是一个分段函数。

把每条路径一起考虑,每次取操作增量最小的路径增加操作,直到满足最大流即可。

由于流量可能很大,实际上一次调整可以直接批量处理到分段函数的下一个转折点。这段区间内都是最优的。

\(O(m\log m)\)

F

**upsolved by **

题意

题解

G

solved by JLK

题意

模拟题,略

题解

H

solved by TYB

题意

给出长度为\(n\)的序列\(a\)和一个质数\(p\),找一个\(a\)的最长的子序列\(b\),使得存在一个整数\(q\in[1,p)\),满足\(b\)为模\(p\)意义下公比为\(q\)的等比数列。若\(b\)的长度\(<\frac{n}{2}\),输出\(-1\),否则输出其长度。

\(n\le2\times10^5,2\le p\le 10^9+7\)

题解

如果\(b\)的长度\(\ge\frac{n}{2}\),由鸽巢原理,\(q\)一定为某个\(\frac{a_{i+1}}{a_i}\)或者\(\frac{a_{i+2}}{a_i}\),这样的\(q\)\(2n\)个。考虑一个长度\(len\ge\frac{n}{2}\)\(b\),设其为\(a_{p_1},a_{p_2},\dots,a_{p_{len}}\),显然\(p_i-p_{i-1}\le2\)\(i\)占了至少一半,也就是在所有可能的\(2n\)个数中,\(q\)的出现次数下界为\(\frac{n}{4}\)左右。这样满足条件的数不会太多,直接check即可。

I

**upsolved by **

题意

题解

J

upsolved by TYB

题意

给出长度为\(n\)的排列\(p\)\(c\),可以任意次进行两种操作:

1、选择一个\(l\le n-c\),若\(p_l\)为区间\([l,l+c]\)的最小值,任意排列区间\([l+1,l+c]\)的数。

2、选择一个\(l\ge c+1\),若\(p_l\)为区间\([l-c,l]\)的最小值,任意排列区间\([l-c,l-1]\)的数。

求能够得到多少种可能的排列。

\(n\le5\times10^5\)

题解

一个很显然的想法,找到最小值的位置,两边独立,分治下去处理。但这个最小值对两边是有影响的,即其左右的\(c\)个数都可以随意排列。所以不妨将分治的状态设为:\(solve(l,r,x,y)\)表示\([l,r]\)这个区间,左边\(x\)个和右边\(y\)个可以自由排列的方案数。

依然找到最小值的位置,分情况讨论。

若最小值不在可以自由排列的区间内,那么其位置依然固定,直接分治即可;

否则,不妨假设最小值的位置\(p\)在左边\(x\)个的区间中。那么我们可以把这个最小值移到\(l+x-1\)这个位置,然后再任意排列其右边的\(c\)个数。感受一下可以发现,这等价于:\([l,l+x+c-1]\)区间内除最小值的数以外,可以自由移动,而最小值只能在\([l,l+x-1]\)这个区间内自由移动。这就相当于,删掉这个最小值,\(x+=c\)后,再处理这个区间。

那么我们需要:删除一个数,查询区间最小值,单点加,区间求和(后两个用于查询区间没被删掉的数的个数)。线段树即可(注意常数)。

K

**upsolved by **

题意

题解

L

**upsolved by **

题意

题解

M

solved by YZW

题意

略微没那么暴力但是还是比较暴力的签到。

题解

略。

记录

YZW过A(0:04),M(0:28)。JLK过E(0:55)。

TYB写H,WA一次后AC(1:20)。

YZW写C,WA一次RE一次后AC(1:50)。

JLK开始写大模拟题G,YZW和TYB看BJ。

G WA两次后AC(3:04)。

一起看B,没什么思路。后来YZW对B打表,JLK和TYB讨论J。

J找到了个看起来可行的写法,TYB开始写。

写到一半YZW感觉找到规律了,然后WA了一次B。

J本地测过交上去直接TLE,卡常失败。B又喂了两发WA。

赛后两题马上都过了。。

总结

JLK:确实最后不应该双开

TYB:改线段树写法,准备个zkw线段树的板子

YZW:打表不要写错暴力!!!

Dirt

C(-2)

G(-2)

H(-1)