求调
查看原帖
求调
834073
CHQCHQ楼主2023/8/27 14:12
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+7;
int T,n,k,a[N],x[N];
bool mark[N];
bool check(int l) {
	int cnt=0,id=k;
	for(int i=n; i; --i) {
		cnt+=a[i];
		if(cnt>l) {
			cnt=a[i];
			id--;
		}
		if(id<=0)return 0;
	}
	if(cnt>l)return 0;
	return 1;
}
signed main() {
	cin>>T;
	while(T--) {
		cin>>n>>k;
		for(int i=1; i<=n; ++i) {
			cin>>a[i];
			mark[i]=0;
		}
		sort(a+1,a+1+n);
		int l=1,r=5e9;
		while(l<=r) {
			int mid=l+r>>1;
			if(check(mid))r=mid-1;
			else l=mid+1;
		}
		int id=k-1,cnt=0;
		for(int i=n; i; --i) {
			cnt+=a[i];
			if(cnt>l||id==i) {
				cnt=a[i];
				mark[i]=1;
				id--;
			}
		}
		for(int i=1;i<=n&&id;++i)if(!mark[i])mark[i]=1,id--;
//		cout<<l<<'\n';
		for(int i=1; i<n; ++i) {
			cout<<a[i]<<' ';
			if(mark[i])cout<<"/ ";
		}
		cout<<a[n]<<'\n';
	}
}

样例过了,但是Wa on #1

2023/8/27 14:12
加载中...