不太明白哪里错了
查看原帖
不太明白哪里错了
175011
rfsfreffr楼主2020/12/2 18:18

std

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,p,k;
int ans1[100001],ans2[100001];
bool check(int x) {
	memset(ans1,0,sizeof(ans1));
	memset(ans2,0,sizeof(ans2));
	for(int i=1; i<=p; i++) {
		if(x==m-x) return 0;
		ans1[i]=x;
		ans2[i]=m-x;
		k-=x;
		if(k<0) return 0;
	}
	for(int i=p+1; i<=n; i++) {
		if(k>=x-1) {
			ans1[i]=x-1;
			ans2[i]=m-(x-1);
			k-=(x-1);
		} else {
			ans1[i]=k;
			ans2[i]=m-k;
			k=0;
		}
	}
	if(k!=0) return 0;
	return 1;
}
void print() {
	puts("YES");
	for(int i=1; i<=n; i++) {
		printf("%lld %lld\n",ans1[i],ans2[i]);
	}
	return ;
}
signed main(){
	cin>>n>>m>>k>>p;
	int l=1,r=m;
	int k0=k;
	while(l<=r) {
		k=k0;
		int mid=(l+r)/2;
		if(check(mid)) {
			print();
			return 0;
		} else r=mid-1;
	}
	puts("NO");
	return 0;
}
2020/12/2 18:18
加载中...