关于今晚ABC的C
查看原帖
关于今晚ABC的C
531930
Southern_Dynasty楼主2022/4/2 22:07

RT,WA了四个点,求hack

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define int long long
#define gt getchar
#define pt putchar
const int N=2e5+5;
using namespace std;
inline int read(){
    int x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}return x*f;
}
inline void print(int x){
    if(x<0)pt('-'),x=-x;
    if(x>9)print(x/10);
    pt(x%10+48);
}
int n,x,k,s[N];
struct abc{
	int a;//价钱
	int b;//商
}syz[N];
bool cmp1(abc a1,abc b1){//根据商从大到小排 
	return a1.b>b1.b;
}
bool cmp2(abc a1,abc b1){//根据余数从大到小排 
	return a1.a>b1.a;
}
signed main(){
	n=read(),k=read(),x=read();
	for(int i=1;i<=n;++i){
		syz[i].a=read();
		s[i]=s[i-1]+syz[i].a;
		syz[i].b=syz[i].a/x;
	}
	sort(syz+1,syz+n+1,cmp1);
	int cnt=0;
	for(int i=1;i<=n;++i){
		while(syz[i].b!=0){
			syz[i].a-=x;
			syz[i].b--;
			cnt++;
		}
		if(cnt==k)break;
	}
	int ans=0;
	sort(syz+1,syz+n+1,cmp2);
	if(cnt!=k){
		for(int i=1;i<=n;++i){
			cnt++;
			ans+=(x-syz[i].a);
			if(cnt==k)break;
		}
	}
	int sum=max(0LL,s[n]-x*k+ans);
	print(sum);
	return 0;
}
2022/4/2 22:07
加载中...