专栏文章

题解:CF939C Convenient For Everybody

CF939C题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@miqq9lq1
此快照首次捕获于
2025/12/04 08:58
3 个月前
此快照最后确认于
2025/12/04 08:58
3 个月前
查看原文

题目传送门

经过推理可以知道此时能够参加比赛的时区有如下三种情况:
  1. i<=num1i<=num1num1i+1num1-i+1 时区到 num2inum2-i 时区可以参加
  2. num1<i<num2num1<i<num2 从1到 num2inum2-i 时区和 num1i+n+1num1-i+n+1nn 时区可以参加
  3. i>=num2i>=num2num1i+n+1num1-i+n+1 时区到 num2i+nnum2-i+n 时区可以参加
由于每个时区的人数是固定的,所以使用前缀和来维护人数的和。

AC Code

CPP
#include <bits/stdc++.h>
using namespace std;
int a[100005], sum[100005];
int main() {
	int n, num1, num2;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		sum[i] = sum[i - 1] + a[i];
	}
	cin >> num1 >> num2;
	int ans = 0, maxn = -0x3f3f3f3f;
	for (int i = 1; i <= n; i++) {
		int cnt;
		if (i <= num1) cnt = sum[num2 - i] - sum[num1 - i];
		else if (i <= num2) cnt = sum[num2 - i] + sum[n] - sum[num1 - i + n];
		else cnt = sum[num2 - i + n] - sum[num1 - i + n];
		if (cnt > maxn) {
			ans = i;
			maxn = cnt;
		}
	}
	cout << ans << endl;
	return 0;
}

评论

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

正在加载评论...