作题总结
20260607
P1044 [NOIP 2003 普及组] 栈
\(Catalan\) 数的模板题,可以根据地推公式:\(C_i=C_{i-1} \cdot \frac{4 \cdot i - 2}{i+1}\)求解。
P1641 [SCOI2010] 生成字符串
同样是 \(Catalan\) 数的模板题,直接使用直接计算公式求解:\(C_n = C_{2n}^{n} - C_{2n}^{n-1}\)。
P3846 【模板】BSGS / [TJOI2007] 可爱的质数
根号类算法思想。
令 \(t=ceil(sqrt(p))\),用 \(t\) 表示 \(x\) 则 \(x=At+B\),那么:
考虑枚举 \(B\),范围 \([0,t-1]\),将所有 \(x \cdot a^B\) 使用 \(hash\) 表存储,此步骤时间 \(O(t)\),再考虑枚举 \(A\),范围 \([1,t]\) 也即计算 \(A\) 个 \(a^t\) 的值,若出现 \(val\) 在 \(hash\) 表中出现过,说明找到了对应的 \(A\) 和 \(B\),则 \(x=At-B\) 即为答案。
P2312 [NOIP 2014 提高组] 解方程
显然,我们应该枚举一下 \(m\),但是肯定会超出范围,我们令 $$f(x)=a_0+a_1x+a_2x2+\cdots+a_nxn$$ 因为 \(f(x)=0\) 所以 \(f(x)\%p=0\) 我们令这个 \(p\) 为一个极大的质数,就有很大概率可以通过这道题了,非常玄学。
P1052 [NOIP 2005 提高组] 过河
首先来向 \(30\%\) 的数据点,令 \(dp_i\) 为走到 \(i\) 所需要踩的最小石子数,则使用一个 \(O(T)\) 的时间复杂度转移就好了。然后就是 \(100\%\) 的数据,如果可以减少这个范围就行了,因为 \(S,T\) 都小于10,则可以轻易发现如果两个石子足够大,则我们直接将其缩短为 \(1000\),这是没有任何区别的,除非 \(S=T\) 所以我们特判一下就行,那么最大的距离就是 \(10^5\) 了。
P4195 【模板】扩展 BSGS / exBSGS
在这里面 \(a,p\) 不互质,我们需要将同余方程和不定方程来回转换:
使用裴蜀定理判断无解。设 \(d\) 是 \(gcd(a,p)\)
到这里如果 \(gcd(a,\frac{p}{d})=1\),就可以跑 BSGS,如果不满足,就接着跑 exBSGS。但是算出来的答案需要 \(+1\)
P2106 Sam 数
考虑一个简单的 \(DP\),令 \(dp_{i,j}\) 表示第 \(i\) 位数,以 \(j\) 结尾的 \(sam\) 数有多少个。由于 \(k\le 10^{18}\) 所以我们使用一个矩阵加速一下即可。
P3376 【模板】网络最大流
网络流模板。
P4568 [JLOI2011] 飞行路线
我们可以考虑一个分层图最短路,建立 \(k\) 层,第 \(i\) 层则表示使用了 \(i\) 次免费路径,所以对于每条输入的边分别建两天不同的边,一条向 \(i\) 层,一条向 \(i+1\) 层。然后跑最短路就行了。
P3957 [NOIP 2017 普及组] 跳房子
首先发现如果一个灵活之 \(g\) 满足条件则 \(g+1\) 也一定满足条件,也就是具有单调性,所以我们可以二分答案。然后用一个优先队列优化 \(DP\) 就行了。
P4302 [SCOI2003] 字符串折叠
注意到 \(n \le 100\),所以可以考虑区间 \(DP\),那么我们令 \(dp_{i,j}\) 表示将区间 \(i,j\) 合并成的最小长度。每次寻找一个中专点 \(k\),令 \(get\)_\(minn(l,r)\) 表示将 \(l,r\) 只折叠一次能得到的最小长度。那么转移方程为:\(min(get\_minn(l,k),dp_{i,k})+min(get\_minn(k+1,j),dp_{k+1,j})\)。最后答案输出 \(dp_{1,n}\)。
P3761 [TJOI2017] 城市
发现 \(n \le 5000\),则边数也不多,所以我们可以枚举拆掉的边。假设这边连接了点 \(x\) 与 \(y\),两个连通块为 \(i\) 与 \(j\)。那么重新连接后的最长路径就只可能是 \(i\) 的直径,\(j\) 的直径,\(i\) 的半径+\(j\) 的半径+\(x,y\) 之间的长度,则直接用树形 \(DP\) 取求就行了。
P5505 [JSOI2011] 分特产
我们考虑求一个数组 \(g\),\(g_i\) 表示恰好有 \(i\) 个人没有礼物的情况,则 \(g_0\) 为我们所需的答案,遇到这种情况,我们一般都先简化问题,然后使用容斥原理求解答案。所以我们令 \(f_i\) 表示至少有 \(i\) 个人没有礼物的情况。则 \(ans={\textstyle \sum_{i=0}^{n-1}} {\textstyle \prod_{j=1}^{m}} C_{a_j+n-i-1}^{n-i-1} \times C_n^i \times (-1)^i \% mod\)

浙公网安备 33010602011771号