月赛T2 60分求调
  • 板块学术版
  • 楼主Maysoul
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/15 18:34
  • 上次更新2023/11/3 09:40:10
查看原帖
月赛T2 60分求调
409774
Maysoul楼主2023/7/15 18:34

太菜了一个小时还没写出来/kk

//2023/7/15
//别着急,先通读一遍题目
//别忘了开long long
//写完先看一遍怎么降复杂度
//要么开全局变量要么给定初值
//想想看,有什么情况需要特判
//看看数组开的够不够大
//std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e6+10;
int num,ans;
struct node{
	int id,val;
	node(){id=0;val=0;}
}b[MAXN];
bool cmp(node aa,node bb){
	return aa.val>bb.val;
}
int a[MAXN];
signed main()
{
	std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	int n,k;
	cin>>n>>k;
	for (int i=1;i<=n;i++){
		cin>>a[i];
		b[a[i]].id=a[i];
		b[a[i]].val++;
	}
	sort(b+1,b+1+n,cmp);
	if(k>=b[1].val){
		cout<<"pigstd"<<endl;
		return 0;
	}
	int mx=b[1].val;
	for (int i=1;i<=n;i++){
		if(b[i].id==0)	break;
		int bk=k;//当前可用的点个数  
		bool flag=1;
		for (int j=1;j<i;j++){
			//cout<<j<<endl;
			if(b[i].val+k<b[j].val-bk||bk<0){ 
				flag=0;
				break;
			}
			else{
				int x=(b[j].val-b[i].val-(k-bk))/2;
				if(x<0) x=0;//不够大,需要拿出来补的点个数 
				bk-=x;
			}
		}
		if(flag){
			//cout<<b[i].id<<endl;
			ans++;
		}
		else{
			break;
		}
	}
	cout<<ans<<endl; 
	return 0;
}
2023/7/15 18:34
加载中...