社区讨论
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 条回复,欢迎继续交流。
正在加载回复...