最后一个点过不去,是有什么特判漏了吗
查看原帖
最后一个点过不去,是有什么特判漏了吗
942108
BR0KEN楼主2023/7/17 20:38
#include <queue>
#include <vector>
using namespace std;
long long n, k, maxn = -1, ans;
long long a[1000009];
priority_queue<long long, vector<long long>, greater<long long> > vec1;
vector<long long> vec;
int main(){
	cin >> n >> k;
	for(long long i = 1; i <= n; i++){
		long long g;
		cin >> g;
		a[g]++;
		if(a[g] > maxn)maxn = a[g];
	}
	if(maxn <= k && k != 0){
		cout << "pigstd";
		return 0;
	}
	for(long long i = 0; i < 1000009; i++){
		if(a[i]){
			vec.push_back(a[i]);
			vec1.push(a[i]);
		}
	}
	priority_queue<long long> q;
	for(long long j = 0; j < vec.size(); j++){
		q.push(vec[j]);
	}
	for(long long j = 1; j <= k; j++){
		q.push(q.top() - 1);
		q.pop();
		if(k - j >= q.top()){
			cout << "pigstd";
			return 0;
		}
	}
	for(long long i = 0; i < vec.size(); i++){
		if(vec1.top() + k >= q.top()){
			cout << vec.size() - i;
			return 0;
		}
		vec1.pop();
	}
	return 0;
}
2023/7/17 20:38
加载中...