ZROI 暑期高端峰会 A班 Day5 杂题选讲

CF469E

\(n\) 个需要表示的数,请使用最少的 \(2^k\)\(-2^k\) 表示出所有需要表示的数。输出方案。

\(n\le 10^5,|a_i|\le 10^5\)

首先每个数肯定都只会被选一次,因为两个 \(1\) 没有一个 \(1\) 一个 \(2\) 优。

然后发现 \(1\)\(-1\) 不会同时选,不如选 \(1\)\(-2\) 或者 \(2\)\(-1\)

考虑缩小问题规模。如果所有数都是偶数,直接全部除以 \(2\)。否则一定要在 \(1\)\(-1\) 中选一个。直接搜索。

如果每层都把数去重,第 \(i\) 层数的个数不会超过 \(\frac{\max(a_i)}{2^i}\)。时间复杂度 \(O((n+\max(a_i))\log \max(a_i))\)

hihocoder 29D

给出一个正整数序列 \(a\),每次可以选择把一个数 \(+1\) 或者 \(-1\)。问最少要多少次才能把这个序列变成不上升序列。

\(n\le 5\times 10^5\)

我们假设求的是不下降序列。

\(f(x)\) 表示最后一个数 \(\le x\) 的答案。由于每次加的代价都是线性的,他显然是一条每段斜率都是正数的折线。

在最右边加入一个 \(A\) 时,将 \(f(x)\) 加上 \(|x-A|\),再和 \(f(x-1)\) 取个 \(\min\)

当两条折线相加时,把拐点取个并就行了。

\(\min\) 显然就是把折线最右边斜率 \(\ge 1\) 的都删掉。

具体做法就是每次插入两个拐点,把 \(x\) 最大的拐点删掉。

最后用 \(f(0)=\sum a_i\) 还原出纵坐标,就能求答案了。

CS Academy 32 G

考虑所有大小为 \(k\) 的正整数可重集,\(\{a_i\}\),其中 \(\sum a_i=n\),求所有 \(\sum a_i^m\) 的和。

\(n,m,k\le 4096\)

\(f_{i,j}\) 表示大小为 \(i\),和为 \(j\) 的总和。转移,由于要保证有序,所以要么是放一个 \(1\),要么是所有数 \(+1\)

可以用组合数转移,复杂度 \(O(n^4)\)

可以用斯特林数转移,复杂度 \(O(n^3)\)

考虑 \(i^m\) 对答案的贡献,就是 \(\sum\limits_{j\ge 1}(至少 j 个 i 的方案数)\)。后面可以用类似上面的 DP 搞。

复杂度 \(O(n^2)\)

CF470E

传说讲过?

就是那个什么鬼对角化。

THUPC 2017 I

给定 \(a_1\)\(a_n\),求 \(f_1\)\(f_n\)。其中 \(f_k\) 表示所有数 \(k\) 次方和。

\(n,k\le 2\times 10^5\)

考虑 \(\sum(1+a_ix+a_i^2x^2+a_i^3x^3+\dots)\),这个就是答案的生成函数。

也就是 \(\sum\frac{1}{1-a_ix}\)

分治 FFT 合并,没了。

复杂度两个 \(\log\)。(不知道能不能过?)

牛顿恒等式:对于一个首一多项式 \(F(x)=\sum\limits_{i=0}^nC_{n-i}x^i\),其中 \(C_0=1\),设 \(P_i\) 表示它的 \(n\) 个根的 \(i\) 次方和。对于所有正整数 \(d\),有等式 \(\sum\limits_{i=0}^{d-1}C_iP_{d-i}+C_dd=0\)

知道 \(C\)\(P\),可以多项式求逆,\(O(n\log n)\)

知道 \(P\)\(C\),可以多项式 exp,\(O(n\log n)\)

对于这题,构造一个多项式 \(\prod(x-a_i)\)\(a_i\) 就是这个多项式的根。带个牛顿恒等式两个 \(\log\)。(会不会被上面那吊打啊……)

某集训队互测题

\(n\) 个点 \(m\) 条带权无向边,权值是 \(0\)\(16\)。问多少种方案选择一些边(不选重边),使得图联通,且边权和模 \(17\) 正好为 \(x\)。对每个 \(0\le x\le 16\) 都求答案。

\(n\le 17,m\le 10^5\)

其实就是个循环卷积,且 \(998244353-1\)\(17\) 的倍数,所以就要先 DFT,最后 IDFT 回去。

考虑总数减掉不连通的方案数。随便选的方案直接背包就行了。后面的枚举 \(1\) 所在的连通块。复杂度 \(O(3^n\times 17)\)

\(f_S\) 表示 \(S\) 中随便选的方案数,\(g_S\) 表示 \(S\) 联通的方案数。

那么有 \(f=e^g,g=\ln f\)。乘法是子集卷积。

\(\ln\),脑补一下,莫比乌斯变换后,像对普通多项式暴力 \(\ln\) 一样做,然后反演回去就行了。

\(O(2^nn^2\times 17)\)

SRM 702

\(n\) 个数 \(a_i\),定义一个区间是 \(k\) 快乐的当且仅当对于区间内每个数都能找到区间内另一个数和它差不超过 \(k\)。给出 \(m\) 求最小的一个 \(k\) 使得存在一个长度 \(\ge m\)\(k\) 快乐区间。

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

二分。用一个数据结构搞出每个数左右第一个和它差不超过 \(k\) 且距离不小于 \(m\) 的位置 \(l_i,r_i\)

考虑分治,问 \([L,R]\) 里面有没有子区间满足条件。

如果区间中存在一个数 \(i\) 使得 \(l_i<L,r_i>R\),那么这个数就没用了。分治 \([L,i-1]\)\([i+1,R]\)

否则一定有。

\(i\),从一边扫复杂度是错的,但是从两边同时扫就能保证复杂度了。

SRM 713

\(n\) 种物品,单个重量 \(w_i\),价值 \(v_i\),每种物品都有无限个。有 \(q\) 个询问:在所有拼出重量恰好为 \(m\) 的方案中,价值最大的是多少,达到最大价值的方案有多少种。注意的是 \((A,A,B)\)\((A,B,A)\) 视为两种不同方案。

\(n,q,w_i\le 100,v_i,m\le 10^9\)

注意到重量不超过 \(100\),那么矩阵优化一下转移就好了。

朴素是 \(O(qn^3\log m)\)

如果我们二进制拆分,每次都保证是向量乘矩阵,复杂度是 \(O(n^3\log m+qn^2\log m)\)

VK Cup 2017 Round 3 F

给定 \(A,N,p\),要对于所有 \(u\),求从 \(1\)\(\lfloor\frac{A}{2^u}\rfloor\) 选出 \(n\) 个数,\(1\le n\le N\)\(n\) 是奇数,且要满足最大数是奇数,的方案数。求和。模 \(p\)

\(A\le 10^9,N\le 30000,10^4\le p\le 10^5+129\)

枚举最大的数,

咕了。

SRM 715

……………………

什么鬼题面,不写了。

考虑 DP,\(f[i][x][j][y][l]\) 表示第一棵树的 \([i,i+l-1]\) 目前到根的遍历方式是 \(x\),第二棵树的 \([j,j+l-1]\) 目前到根的遍历方式是 \(y\) 可不可行。

转移就按题意模拟。

\(O(n^3)\)

Codechef SNCKEL17

\(n\)\(m\) 边无向图,每条边有编号。

\(q\) 次操作,每次交换两条边的编号,然后回答:按边从小到大加入,加到整张图连通时编号是多少。

\(n,m,q\le 10^5\)

这应该……动态维护最小生成树?

离线下来线段树分治 + LCT 就行了。

还有神奇分治,但是没听懂。

THUPC2017D

\(n\)\(m\) 边无向简单图。每个点度数 \(\le 7\)。给点四染色,要求每个点最多有一个邻居和它颜色相同。输出方案或者无解。

\(n\le 25000,m\le 10^5\)

先随便搞一个初始解,然后调整。

找一个萎掉的点,把它换成一种合法的颜色。

用队列模拟。

由于每次调整都能把两端颜色相同的边减少,所以复杂度是 \(O(m)\)

posted @ 2019-08-20 14:12  ATS_nantf  阅读(218)  评论(0编辑  收藏  举报