如果不是直接写 100pts 做法,就是赛时不会,或者对 AC 做法有很大启发。
T1
题意简述
求 \(a(1+p+pq)=n\) 整数解数量,其中 \(n\) 是给定的, \(p,q\) 均不能取 \(1\)。
sol
考虑试除法,一遍试出所有的 \(a\),然后求出 \(1+p+pq=\frac{n}{a}\),同样可以试除法枚举。
时间复杂度 \(O(\sqrt{n})\)。
T2
题意简述
给定一个平面坐标系,在一些坐标上有不同颜色的点,对于一个长宽可为 \(1\) 的矩形,定义其权值为矩形内部颜色为 \(0\) 与颜色为 \(1\) 的点的数量的乘积,包括矩形边界。
求所有矩形的权值和。
sol
70pts
考虑枚举所有 \(0/1\) 点对,考虑有多少个矩形能够被这个点对贡献。
100pts
可以用树状数组维护,枚举 \(1\) 点,考虑其它所有 \(0\) 点对它的贡献。
T3
题意简述
有一些操作,它只对部分连续的时间有效,在 \(1\) 到 \(n\) 的时间分别出现了一个区间。操作是进行若干次切割操作,每次会给出 \(x,s,t\),表示对 \(s\le i\le t\) 的区间 \([l_i,r_i]\) 从 \(x\) 处切割,保留较长的一段,两段相等时保留左侧的。
这些操作按照输入顺序执行,所有操作都会在有效期间立即生效,且每个区间只会在存在一个时间,求每个区间的最终左右端点。
sol
受到到TEST_152启发,考虑对操作扫描线,把整个区间分成三半,有 \(\frac{1}{3}\) 的概率切到中间部分,\(\frac{2}{3}\) 的概率切到边上两部分。
发现如果只切在中间,最多只用切 \(\log m\) 次。
考虑取中间部分的最小时间戳,记为 \(t\),在左部分找出最大的满足时间戳小于 \(t\) 的点,这便是执行中间部分操作时的左端点,再在有部分找出最小的满足时间戳小于 \(t\) 的点,这时是执行中间部分操作时的右端点。
然后就正确了。
T4
题意简述
给定一个图,图上有 \(n\) 个点,求在 \(m\) 次连边后,不存在孤立点的期望,结果对 \(P\) 取模。
sol
30pts
直接考虑动态规划。
代码段如下:
ll bs = dp[i][t] * inv % md;
if (i >= 1 && j >= 1) {ll cnt = i * j % md;dp[i + 1][t + 1] = (dp[i + 1][t + 1] + bs * cnt) % md;
}
if (j >= 2) {ll cnt = j * (j - 1) / 2 % md;dp[i + 2][t + 1] = (dp[i + 2][t + 1] + bs * cnt) % md;
}