Loading

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";
        }
    }
}
posted @ 2022-08-21 16:40  nekko  阅读(321)  评论(0)    收藏  举报