80分,Subtask5最后一个点WA,求调
查看原帖
80分,Subtask5最后一个点WA,求调
597089
zhangyuanxiao楼主2023/7/16 20:10
#include<iostream>
#define int long long
using namespace std;

const int MAXN=1e6+5;
int n,k,a[MAXN],z[MAXN],num[MAXN],sum1[MAXN],sum2[MAXN],maxx,ans;
//a:序列 
//z:每个数出现的数量
//num[i]:有多少个数出现了i次 

signed main(){
//	freopen("1.in","r",stdin);
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		z[a[i]]++;
		maxx=max(maxx,z[a[i]]);
//		cout<<maxx<<" ";
	}
	if(maxx<=k){
		cout<<"pigstd";
		return 0;
	}
//	for(int i=1;i<=n;i++) cout<<z[i]<<" ";
//	cout<<'\n';
	for(int i=1;i<=n;i++) num[z[i]]++;//,cout<<num[z[i]]<<" ";
//	for(int i=1;i<=maxx;i++) cout<<num[i]<<" ";
//	cout<<'\n';
	for(int i=maxx;i>0;i--){
		sum1[i]=sum1[i+1]+num[i]*i;
		sum2[i]=sum2[i+1]+num[i];
		if(num[i]){
			if(i+k>=maxx || sum1[i+k+1]-sum1[maxx+1]-(i+k)*(sum2[i+k+1]-sum2[maxx+1])<=k) ans+=num[i];
		} 
	}
	cout<<ans;
	return 0;
}

/*

8 1
1 2 3 2 3 4 5 6

20 3
1 1 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3

*/
2023/7/16 20:10
加载中...