专栏文章
题解:CF928B Chat
CF928B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqqxguv
- 此快照首次捕获于
- 2025/12/04 09:17 3 个月前
- 此快照最后确认于
- 2025/12/04 09:17 3 个月前
对于数列 ,对于每个 :
- 答案为第 个左右 个,注意判断是否可以取。
- 观察到题目保证 ,所以答案为第 个左右 个加上第 个的答案减去重叠。
对于不同的情况,我们只要分开判断就行了。
代码
CPP#include <bits/stdc++.h>
using namespace std;
int a[100005];
int main() {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
int m;
cin >> m;
if (m == 0) {
a[i] = min(k, i - 1) + 1;
} else {
a[i] = a[m] + min(k * 2 + 1, i - m);
}
cout << a[i] + min(k, n - i) <<" ";
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...