8.15 总结

T1

循环边界写错了,怒挂 10 pts。

注意到数据范围只有 \(100\),那么状态就可以大胆设。

发现它类似一个背包模型,那么设 \(f_{i,j}\) 表示第 \(i\) 次攻击前,还剩 \(j\) 点魔法值最大伤害值。发现不太好确定由哪些状态转移,考虑扩散型转移。转移分讨一下就好了。

T2

我的想法是 \(\forall p > \sqrt[3]{n}\),都有 \(p^3 > n\),那么对答案没有贡献,所以质数枚举到 \(\sqrt[3]{n}\) 来分解就好了。复杂度 \(\mathcal O(T\frac{\sqrt[3]{n}}{\ln\sqrt[3]{n}})\),大概 \(3.6 \times 10^8\) 的样子。感觉能过啊?

但老师说这个复杂度是错的。

发现若存在两个大于 \(\sqrt[4]{n}\) 的质因子 \(p_1^{q_1},p_2^{q_2}\),且 \(q_1 \ge 3\),那么 \(p_1^{q_1}>n^{\frac{3}{4}},p_2^{q_2}>n^{\frac{1}{4}}\),所以 \(p_1^{q_1} \times p_2^{q_2} > n\)

因此当仅存在一个大于 \(\sqrt[4]{n}\) 的质因子时,才会对答案有贡献。所以枚举到 \(\sqrt[4]{n}\) 的质数,二分判一下剩下那个数是不是完全立方数即可。复杂度 \(\mathcal O(T(\frac{\sqrt[4]{n}}{\ln\sqrt[4]{n}}+\log 10^6))\),大概 \(1.5 \times 10^7\)

P.S: 题解的复杂度算错了。

T3

老师怎么能出拼好题。

没看到前 \(30\%\) 的数据,只写了后 \(70\%\)。怒挂 20 pts。

\(30\%\) 的数据 \(\mathcal O(n^2)\) 暴力就好。

\(70\%\) 非常抽象。注意到 \(m \le n + 200\),考虑多出来的这 \(200\) 条边的贡献。

发现答案要么不走这 \(200\) 条边,如果走了,这 \(200\) 条边暴力跑也绰绰有余。

所以把这 \(200\) 条边上的点拎出来,每个点为起点 bfs。剩下的边是一棵树,求最短路是老生常谈了。

询问时,枚举多出来的所有点,取不走和走的较小值即可。

但这东西过不了 \(n=10^3\),因为这时候 \(m \le \frac{n(n-1)}{2}\),所以在小数据时要拼个暴力。

以后要注意数据范围是否包含。

T4

老师怎么能出原题。

考虑什么情况下 \(s_{1,i}\) 会成为最大前缀和:

  1. \(\forall j<i,s_{j,i}\ge0\)

  2. \(\forall j>i,s_{i,j}<0\)

那么考虑枚举前缀和后缀,单独算前缀和后缀的方案。

发现 \(n \le 20\),考虑状压 dp。

\(f_s\) 表示最后的数满足条件 1 的方案数,\(g_s\) 表示第一个数满足条件 2 的方案数。转移就很简单了。

最后枚举中间的数,把前缀和后缀的答案统计起来就好了。

posted @ 2025-08-16 09:57  Luckies  阅读(12)  评论(0)    收藏  举报