2022 CCPC 华为云计算挑战赛
https://acm.hdu.edu.cn/contest/problems?cid=1072
01
设 \(f[i][j]\) 表示前 \(i\) 个分成 \(j\) 段的最小代价,预处理一下区间代价即可。
02
前缀和算一下平均数就行了。
03
由于CDN个数比较少,可以枚举只使用哪些CDN。CDN等价于一个流量放大器,即只要流入 \(1\) 的流量,那么可以流出任意多的流量。
考虑二分答案 \(M\),那么每条边最多可流过 \(c/M\) 的流量。
在check答案可行性时,可以将CDN拆点 \((u_1,u_2)\),那么就要求 \(u_1 \to u_2\) 流量至少为 \(1\),同时连 \(s \to u_2\) 流量为无穷的边,跑有下界最大流。
这等价于连 \(u_1 \to t\) 流量为 \(1\),连 \(s \to u_2\) 流量为无穷,最后check总流量是否为选用的CDN个数和用户个数之和。
04
05
设 \(f[i][k]\) 表示前 \(i\) 个数的所有子集和的 \(k\) 次方的和,则:
\[f[i][k]=f[i-1][k]+x\sum_{j=0}^{k} {k \choose j} f[i-1][j]a_i^{k-j}
\]
后面是个卷积形式:
\[\begin{aligned}
&g_{k}=\sum_{j=0}^{k}{k \choose j} h_j c^{k-j}=\sum_{j=0}^{k}\frac{k!}{j!(k-j)!} h_j c^{k-j} \\
&\frac{g_k}{k!}=\sum_{j=0}^{k} \frac{h_j}{j!} \cdot \frac{c^{k-j}}{(k-j)!}
\end{aligned}
\]
特别的,当 \(k=0\) 时:
\[\sum_{\emptyset \ne S \subseteq A}x^{|S|}=\sum_{i=1}^{n}x^i{n \choose i}
\]
06
07
有趣的构造题。假设已经得到了 \(\sqrt{\frac{p}{q}}\),那么可以通过 \(ts,tc\) 获得 \(\sqrt{\frac{p}{p+q}},\sqrt{\frac{q}{p+q}}\),把这个过程反过来即可。
void calc(ll p, ll q) {
if(p == 1 && q == 1) {
res += 'c';
} else {
if(q - p >= p) {
calc(p, q - p);
res += "ts";
} else {
calc(q - p, p);
res += "tc";
}
}
}

浙公网安备 33010602011771号