错误的解法但是过了八个点
查看原帖
错误的解法但是过了八个点
364940
Lappland_Texas楼主2021/1/29 17:02
#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long
#define N 50001
struct edge{
	int l,r;
}ed[N];
int n,m,cnt;
int bk[N];
int maxn,minn,nxt[N];

bool check(int x)
{
	int sum=0,t=0;
	for(int i=1;i<=n;i++)
	{
		if(t+bk[i]>=x)t=bk[i],sum++;//这里
		else t+=bk[i];
	}
	if(sum>=m)return 1;
	else return 0;
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)scanf("%d",&bk[i]),maxn+=bk[i],nxt[i]=bk[i];
	for(int i=1;i<=n;i++)nxt[i]=nxt[i]+nxt[i-1];
	while(minn<maxn)
	{
		int mid=(maxn+minn+1)>>1;
		if(check(mid))minn=mid;//这里
		else maxn=mid-1;
	}
	int id1,id2;
	int t=0,sum=0;
	ed[++cnt].r=n;
	for(int i=n;i>=1;i--)
	{
		if(t+bk[i]>minn)t=bk[i],ed[cnt].l=i+1,ed[++cnt].r=i;
		else if(t+bk[i]==minn)t=0,ed[cnt].l=i,ed[++cnt].r=i-1;	
		else if(t+bk[i]<minn)t+=bk[i];
	}
	ed[cnt].l=1;
	for(int i=cnt;i>=1;i--)
	{
		if(ed[i].l!=0&&ed[i].r!=0) 
		cout<<ed[i].l<<" "<<ed[i].r<<endl;
	}
	return 0;
}
2021/1/29 17:02
加载中...