求助!!!莫名其妙TLE
查看原帖
求助!!!莫名其妙TLE
636936
tyccyt楼主2024/10/29 15:56
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,int>
#define fi first
#define se second
const int N=1e6+5;
ll n,k;
ll a[N];
ll ans[N];
priority_queue<pii,vector<pii>,greater<pii> > q;
inline int check(ll mid)
{
	ll sum=n;
	for(int i=1;i<=k;i++)
	{
		sum-=mid/a[i];
		if(sum<0)return 0;
	}
	return 1;
}
signed main()
{
	cin>>n>>k;
	ll mid,l=0,r=0,t=0;
	for(int i=1;i<=k;i++)
	{
		cin>>a[i];
		if(r<a[i])r=a[i];
	}
	l=r+1;
	r*=n;
	while(l<=r)
	{
		mid=(l+r)>>1;
		if(check(mid))t=mid,l=mid+1;
		else r=mid-1;
	}
	for(int i=1;i<=k;i++)
	{
		t=min(t,max(0ll,((t/a[i])-1)*a[i]));
	}
	ll num=0;
	for(int i=1;i<=k;i++)
	{
		num+=t/a[i];
		q.push(make_pair(t/a[i]*a[i],i));
	}
	while(num<n)
	{
		pii u=q.top();
		q.pop();
		ans[u.se]=++num;
		u.fi+=a[u.se];
		q.push(u);
	}
	for(int i=1;i<k;i++)
	{
		printf("%lld ",ans[i]);
	}
	cout<<ans[k];
	return 0;
}
2024/10/29 15:56
加载中...