1 条题解
-
0
自动搬运
来自洛谷,原作者为

lcfollower
不 AK Div.2 & 3 不改签 | AT 不上蓝不改签(目前只有绿)。 | 不拿蓝钩不改签。 | 大号在 N 个月前已清关,误清的用这个号回关搬运于
2025-08-24 23:17:45,当前版本为作者最后更新于2025-06-10 21:03:02,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
修改
- :根据评论修改一处错误(自己
懒得写对应部分分代码犯下了唐错误),并且顺带修改一点错别字和写错的值域范围。
这题其实一眼 DP,但是可能状态设计需要细想才能优化。
子任务 ,
这里的 很小,。
于是我们设 为前 个环,红色的和恰好为 ,蓝色的和恰好为 的方案数。
-
边界条件:
-
状态转移:$f_{i ,j ,k} = f_{i - 1 ,j - i ,k} + f_{i - 1 ,j ,k - i}$。
-
其中, 表示第 圈涂红的方案数, 表示第 圈涂蓝的方案数。
-
注意边界!比如 或 才能转移之类的。
-
记 ,即前 圈数值的和,又可以理解为红色与蓝色的和(正好涂满整个所有环)。
-
转移条件:,即正好涂满。
这样做时间复杂度为 ,其中 为圈的个数, 为 , 的值域(即 )。
但是观察到,转移条件为 ,我们可以在 枚举 ,然后通过 求的 。
这样的时间复杂度为 。
那么答案即为 $\sum\limits_{i = 1}^{n}\sum\limits_{j=0}^a [s-j\le b]\times f_{i,j,s-j}$。
其中, 表示 成立,值为 ;否则为 。
,表示 ,下文都这么表示,不再阐述。
这样求答案也是 的,足以通过两个子任务,总时间复杂度为 ,理论上来说可以做到 !
这里埋了一个点, 的范围?
考虑到 ,不然整个圈都涂不满。
因为 ,。
所以 约为 ,数组开 包不会缺少圈数,更何况 还是估大了。
但是过不了更高的分数是因为空间问题。
代码这里不放了,可以自己练练手。
空间优化
考虑到 只有在 时才能转移,那么我们能不能:
- 状态设计: 为前 圈涂红的和恰好为 ,涂蓝的和恰好为 的方案数。
这样明显是可以的!
那么:
-
边界条件:。
-
状态转移:。
-
其中, 表示第 圈涂蓝的方案数, 表示第 圈涂红的方案数。
-
注意边界!比如 才能转移之类的。
这样空间复杂度变成了 !即为 ,非常优秀!
于是我们拿到了 分!
inline void solve (){ int x = read () ,y = read () ,ans = 0; up (i ,1 ,450) { int s = (1 + i) * i / 2; up (j ,s - y ,x) ans += f[i][j] ,ans %= mod; //在这个范围内可以保证 s - j <= y,可以自己解不等式试试。 } writeln (ans); } inline void init (){ f[0][0] = 1;//边界条件。 up (i ,1 ,450){ int s = (1 + i) * i / 2; up (j ,0 ,50000){ int k = s - j; if (k < 0) break;//蓝的不可能涂色,不用转移。 if (j >= i) f[i][j] = (f[i - 1][j] + f[i - 1][j - i]) % mod;//这一圈可以涂红,也可以涂蓝。 else f[i][j] = f[i - 1][j];//不然这一圈这能涂蓝。 } } }正解
观察到我们的瓶颈在于 中,考虑优化它。
我们发现这是一段和的形式,于是我们想到用前缀和,这样时间复杂度为 了。
但是前缀和还有边界,现在我们记 :
-
首先要满足 ,不然不能转移。
-
,那么贡献为 。
-
否则,贡献为 。
所有贡献之和即为答案,注意取模!
修改过后的核心部分:
inline void solve (){ int x = read () ,y = read () ,ans = 0; up (i ,1 ,450) { int s = (1 + i) * i / 2; int p = max (0ll ,s - y - 1); if (s - y > x) break;//不能转移,j 更大时肯定也不能转移。 if (s - y <= 0) ans = (ans + f[i][x]) % mod; else ans += f[i][x] - f[i][p] + mod ,ans %= mod;//两种边界,防止 RE。 } writeln (ans); }最后
求通过并无耻地求赞。 - :根据评论修改一处错误(自己
- 1
信息
- ID
- 12462
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者