社区讨论

40分求助

P4343[SHOI2015] 自动刷题机参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lrbsc67x
此快照首次捕获于
2024/01/13 16:08
2 年前
此快照最后确认于
2024/01/13 19:12
2 年前
查看原帖
本苟蒻着实看不出哪出了问题,求各位dalao指点
C
#include <stdio.h>

int l, k;
long long max, min;
long long arr[100005];

long long check(long long x)
{
	long long sum = 0, cnt = 0;
	for (int i = 0; i < l; i++)
	{
		sum += arr[i];
		if (sum >= x)
		{
			sum = 0;
			cnt++;
		}
		if (sum < 0)
			sum = 0;
	}
	return cnt;
}

int main()
{
	bool flag = true;
	long long left, right, mid;
	left = 1;
	right = 1e10;
	scanf("%d %d", &l, &k);
	for (int i = 0; i < l; i++)
	{
		scanf("%d", &arr[i]);
	}
	//找最小
	while (left <= right)
	{
		mid = (left + right) / 2;
		int t = check(mid);
		if ( t <= k)
		{
			right = mid - 1;
			if (t == k)
			{
				min = mid;
				flag = false;
			}
		}
		else
			left = mid + 1;
	}
	if (flag)
	{
		printf("-1");
		return 0;
	}
		
	//找最大
	left = 1; right = 1e10;
	while (left <= right)
	{
		mid = (left + right) / 2;
		int t = check(mid);
		if (t >= k)
		{
			left = mid + 1;
			if (t == k)
			{
				max = mid;
			}
		}
		else
			right = mid - 1;
	}
	printf("%lld %lld", min, max);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...