专栏文章
如果声音不记得
B4146题解参与者 3已保存评论 7
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @miq8luhz
- 此快照首次捕获于
- 2025/12/04 00:44 3 个月前
- 此快照最后确认于
- 2025/12/04 00:44 3 个月前
Source and Knowledge
2025 年 2 月语言月赛,由洛谷网校提供。
考察简单数组。
文字题解
根据题目的要求,我们可以改变连续 场比赛的得分。
枚举这 场比赛的起始场次 ,那么,终止的场次是 。下面的代码,外层循环 枚举起始场次, 枚举场次。
CPPfor (int i = 1; i + k - 1 <= n; i++) {
for (int j = i; j <= i + k - 1; j++) {
a[j] -= 2;
}
// something else here
}
对于 范围内的每一场比赛 ,我们修改其比分,将 减去 。由于另外一人的得分为 ,将 减去 的同时,自然的完成了另一人得分增加 的过程。
随后,我们枚举全部的比赛,统计粉边铅球可以赢的比赛数目。如果粉边铅球赢的比赛数目更多,则统计一次答案。
CPPint win = 0;
for (int j = 1; j <= n; j++) {
if (99 - a[j] > a[j]) win++;
}
if (win > n - win) ans++;
需要注意的是,在进行下一次比分修改时,需要撤销本次修改的比分。每一次比分修改是独立的。
综上,可以得到核心代码如下。
CPPfor (int i = 1; i + k - 1 <= n; i++) {
for (int j = i; j <= i + k - 1; j++) {
a[j] -= 2;
}
int win = 0;
for (int j = 1; j <= n; j++) {
if (99 - a[j] > a[j]) win++;
}
if (win > n - win) ans++;
for (int j = i; j <= i + k - 1; j++) {
a[j] += 2;
}
}
相关推荐
评论
共 7 条评论,欢迎与作者交流。
正在加载评论...