专栏文章

CF283D

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mir2iwyi
此快照首次捕获于
2025/12/04 14:42
3 个月前
此快照最后确认于
2025/12/04 14:42
3 个月前
查看原文
link
这是一道非常有趣的题目:
题意: 对于一个序列 aia_i ,修改最少的位置使得 i[1,n1]\forall i \in [1, n - 1] aia_i, 可以表示为 ai+1a_{i + 1} 个数字的和。
我们先考虑对于一组满足要求的数字 (x,y)(x, y), xx, yy 之间满足什么关系: x=y(y1)2+ky x = \frac{y(y - 1)}{2} + ky 2xyy=2k1 \frac{2x}{y} - y = 2k - 1 所以 2xyy=2k1 \frac{2x}{y} - y = 2k - 1 是奇数, 有奇偶性, 我们考虑把数字表示成 2v(x)p(x)2 ^ {v(x)} * p(x) 的形式
2v(x)+1v(y)p(x)p(y)y2 ^ {v(x) + 1 - v(y)} * \frac{p(x)}{p(y)} - y 首先, 要满足 p(y)p(x)p(y) | p(x)
然后, 进行分类讨论
1.\ y = 2k + 1, \ (k \in \Z), \ v(y) = 0, \ v(x)任意\\ 2. \ y = 2k, \ (k \in \Z), \ v(y) = v(x) + 1 $$ 然后,进行 $DP$ ```cpp for (int i = 1; i <= n; i++) { f[i] = i - 1; for (int j = 1; j < i; j++) { if (p[j] % p[i] != 0) continue; if (v[i] == v[j] + i - j || v[i] <= i - j - 1) f[i] = min(f[i], f[j] + i - j - 1); } ans = min(ans, f[i] + n - i); } ```

评论

0 条评论,欢迎与作者交流。

正在加载评论...