社区讨论
95分求助qwq
P4343[SHOI2015] 自动刷题机参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @loboqdef
- 此快照首次捕获于
- 2023/10/30 00:28 2 年前
- 此快照最后确认于
- 2023/11/04 05:10 2 年前
rt,WA了第四个点……
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int l,k;
int rec[100005];
ll minn=LLONG_MAX,maxn=-1;
ll calc(ll n)
{
ll sum=0,res=0;
for (int i=1;i<=l;i++)
{
sum=max(0ll,sum+rec[i]);
if (sum>=n)
{
res++;
sum=0;
}
}
return res;
}
void work(ll l,ll r,int sign)
{
if (l>r)
return;
// sign=-1 both
// sign=0 left
// sign=1 right
ll mid=(l+r)>>1;
ll q=calc(mid);
if (q<k)
work(l,mid-1,sign);
if (q>k)
work(mid+1,r,sign);
if (q==k)
{
minn=min(minn,mid);
maxn=max(maxn,mid);
if (sign==1)
work(mid+1,r,sign);
if (sign==0)
work(l,mid-1,sign);
if (sign==-1)
{
work(l,mid-1,0);
work(mid+1,r,1);
}
}
return;
}
int main()
{
// freopen("IceAge.in","r",stdin);
// freopen("IceAge.out","w",stdout);
scanf("%d%d",&l,&k);
for (int i=1;i<=l;i++)
scanf("%d",&rec[i]);
work(1,LLONG_MAX,-1);
if (maxn==-1)
puts("-1");
else
printf("%lld %lld\n",minn,maxn);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...