请问一下这个为什么WA了Qwq
查看原帖
请问一下这个为什么WA了Qwq
672837
DaShabby楼主2022/9/1 17:00
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int>pii;
const int maxn=1e5+34,MAXN=8e4;
ll idx,cnt,a[maxn],b[maxn],pre[maxn],back[maxn];
ll MOD=1e9+7;
deque<ll>que[3];
vector<ll>G[2];
int main()
{
	ll n,k,minus;
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++){
		int l=i,r=i+1;
		while(a[l]==a[r])r++;
		i=r-1;
		que[0].push_back(r-l);
		que[1].push_back(a[l]);
		que[2].push_back(a[l]);
	}
//	for(int i=1;i<=n;i++)cout<<a[i]<<' ';
//	cout<<endl;
	for(int i=1;i<=2*que[0].size()+3;i++){
		que[2].push_back(que[2].front());
		que[2].pop_front();
		pre[que[2].front()]=que[2].back();
		back[que[2].back()]=que[2].front();
	}
	while(k>0&&que[0].size()>1){
		if(k<que[0].front()*(back[que[1].front()]-que[1].front())&&k<que[0].back()*(que[1].back()-pre[que[1].back()]))break;
		if(que[0].front()*(back[que[1].front()]-que[1].front())<=que[0].back()*(que[1].back()-pre[que[1].back()])){
			k-=que[0].front()*(back[que[1].front()]-que[1].front());
			ll t=que[0].front();que[0].pop_front();
			t+=que[0].front();que[0].pop_front();
			que[0].push_front(t);
			que[1].pop_front();
		}
		else{
			k-=que[0].back()*(que[1].back()-pre[que[1].back()]);
			ll t=que[0].back();que[0].pop_back();
			t+=que[0].back();que[0].pop_back();
			que[0].push_back(t);
			que[1].pop_back();
		}
	}
//	while(que[0].size()){
//		cout<<que[0].front()<<' '<<que[1].front()<<endl;
//		que[0].pop_front();que[1].pop_front();
//	}
	if(k>0&&que[0].size()>1){
		minus=k/min(que[0].front(),que[0].back());
	}
	if(k>0&&que[0].size()>1)minus+=k/min(que[0].front(),que[0].back());
	printf("%lld\n",max(que[1].back()-que[1].front()-minus,cnt));
	return 0;
}
2022/9/1 17:00
加载中...