# 2021-9-16 Test

100 + 0 + 0 + 30
T1 由于高中数学知识有点忘了,写了 2h+
T2 并不知道这个奇妙的 MO 结论
T3 没开
T4 一直在考虑转换贡献贪心,没有想到网络流
总之就是知识树不够广,思维不够活跃


# Raster

三维空间中很多三角形,全在 xyxy 平面上方,每次询问一条端点在 xyxy 平面上,垂直与 xyxy 平面的一条射线穿过的若干三角形中,哪个三角形到端点最近。

n,Q1000n,Q\le 1000

# Sol:

无脑 O(nq)\mathrm O(nq) ,每个三角形求个法向量,这样就能表示平面方程了,然后求出每条射线与每个三角形平面的交点看是不是在三角形内部,这个解个平面方程在用叉积看一看就好,调试上的细节是如果复制了两个差不多的代码段前一个有错那后裔个一定有错

# Binom

给定一个质数 pp ,和一个整数 nn ,对所有 0kK0\le k\le K 求有多少 0mn0\le m\le n 使得 \binom{n}{m}\equiv 0\pmod

n101000,K3000,p109n\le 10^{1000}, K\le 3000, p\le 10^9

# Sol:

这种 nn 贼大的看到就只有两种出路…
要不高精搞,要不数位 dp。 见识少极易被打脸
UPD: 对了,还可能与其无关

这题要利用一个 MO 结论, kummerkummer 定理: (n+mn)0(modpk)\binom{n + m}{n} \equiv 0\pmod{p^k} 若成立,则 n,mn,mpp 进制下的加法进了 kk 次位。
知道这一点后先把给出的 nn 当做 n+mn+m 转成 pp 进制,然后套路地设 dpi,j,0/1,0/1dp_{i,j,0/1,0/1} 表示从高到低第 ii 位,已经进了 jj 位,上一位进了 / 没进,当前有 / 无顶上界的方案数,转移有亿点点细节~
此时我们得出的是 x,ynx,y \le n 的方案数,我们要求的是 x+y=nx+y = n 的答案,于是我们把 nn-- 再做一遍容斥掉即可。

# CRC

给定一些模 22 意义下的多项式,给出一些 aa ,给定 cc, 求出 bb ,满足 c=amodbc = a \mod b

n3000,3000n\le 3000, |\sum| \le 3000

# Sol:

发现模 22 意义下,多项式减法就是异或啦
然后把每个 aa 先减去 cc
然后直接做一个多项式 gcd\gcd
考虑把普通的 gcd\gcd 放到多项式上,发现就是模拟一个大除法的过程
bitsetbitset 优化以下即可通过此题。

# Food

若干城市形成一张有向图,每个城市有一些产能 eie_i 可正可负,每座城市有个权值 did_i ,其贡献为 dieid_i|e_i| ,有 mm 条路 (u,v,c,w)(u,v,c,w) ,每条路可以花费 ww 使得 eu,ev++e_u--, e_v++ 最多用 cc 次,最小化贡献和

n200,m,d,e,c4000n\le 200, m, d, |e|, c\le 4000

# Sol:

发现走一条路的效果是 eu,ev++e_u--, e_v++ ,很像流量守恒,于是考虑网络流
原来的路边我们保留,那么网络上流量的意义就是产能 ee
发现流量很多是负的并不好处理,于是我们整体加上一个大数 MAX\mathrm MAX 此时 MAXMAX00
源点向每个点连一条 M+eiM + e_i 的边表示每个点初始的产能,然后发现这些流量是可以在点之间流流流的,每个点最终流量 ff 考虑在它流到汇点时统计答案

fMAXf\ge \mathrm MAX ,我们认为此时此城市的最终产能是要大于 00 的,贡献应为 (fMAX)×di(f-\mathrm MAX) \times d_i
f<MAXf < \mathrm MAX ,贡献应为 (MAXf)×di(\mathrm MAX - f) \times d_i
考虑用两条边来模拟这个过程,对于每个点,我们向汇点连一条容量为 MAX\mathrm MAX ,费用为 di-d_i 的边,这里我们是把第二个柿子拆开来看的,预先把常数 MAX×di\mathrm MAX \times d_i 加入答案里,那每流一次就自然会减掉 did_i ,类似的,我们还向汇点连一条容量为 INFINF ,费用为 did_i 的边,由于我们 MCMFMCMF 的过程是跑最短路的,所以我们优先会流 di-d_i 的路,流满后不难发现就是上面那个过程