ABC E WA*20 求调
  • 板块学术版
  • 楼主lgx57
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/28 21:56
  • 上次更新2024/9/29 12:48:35
查看原帖
ABC E WA*20 求调
1053695
lgx57楼主2024/9/28 21:56

https://atcoder.jp/contests/abc373/submissions/58239035

#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N=2e5+5;
struct node{
	int x,id;
}a[N];
bool cmp(node x,node y){
	return x.x>y.x;
}
int ans[N];
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n,m,k;
	cin>>n>>m>>k;
	int sum=0;
	for (int i=1;i<=n;i++) cin>>a[i].x,a[i].id=i,sum+=a[i].x;
	if (m==n){
		for (int i=1;i<=n;i++) cout<<0<<' ';
		return 0;
	}
	int la=k-sum;
	sort(a+1,a+n+1,cmp);
	int sma=a[m+1].x;
	int cnt=0;
	for (int i=1;i<=m;i++){
		cnt+=a[i].x;
	}
	for (int i=1;i<=n;i++){
		if (i<=m){
			if ((a[i].x+1)*m>(cnt-a[i].x+sma+la)){
				ans[a[i].id]=0;
				continue;
			}
			int Ans=((cnt-a[i].x+sma+la-m-m*a[i].x+1ll+m)/(m+1ll));
//			int Ans=(int)(ceil((cnt-a[i].x+sma+la-m-m*a[i].x+1)*1.0/(m+1)));
			ans[a[i].id]=(Ans>la?-1:Ans);
		}
		else{
			if ((a[i].x+1)*m>(cnt+la)){
				ans[a[i].id]=0;
				continue;
			}
//			cout<<"!!! "<<(cnt+la+1)*1.0/m<<endl;
			int Ans=(cnt+la-m-m*a[i].x+1ll+m)/(m+1ll);
//			int Ans=(int)(ceil((cnt+la-m-m*a[i].x+1)*1.0/(m+1)));
			ans[a[i].id]=(Ans>la?-1ll:Ans);
		}
	}
	for (int i=1;i<=n;i++) cout<<ans[i]<<" \n"[i==n];
	return 0;
}
2024/9/28 21:56
加载中...