专栏文章

P13733 [JOIGST 2025] 扑克 / Poker

P13733题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio9i0ct
此快照首次捕获于
2025/12/02 15:33
3 个月前
此快照最后确认于
2025/12/02 15:33
3 个月前
查看原文

题目传送门

题目大意:有 NN 个数进行大小排序并去重,然后如果有KK个不重复的数差为 11。就输出 Yes,否则输出 No。 ———————————————————————————
NN 个数进行大小排序并去重正是桶排序的特点。

RE代码:

CPP
#include<bits/stdc++.h>
using namespace std;
int a[3000001];
int main()
{
	int n,k,max=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		a[x]++;
		if(max<x) max=x;
	}
	int s=0;
	for(int i=1;i<max;i++){
		if(a[i]!=0 && a[i+1]!=0)
			s++;
		else s=0;
		if(s==k){
			cout<<"Yes"<<endl;
			return 0;
		}
	}
	cout<<"No"<<endl;
	return 0;
}
但是会 RE。 因为桶排序不适合数据分布不均情况‌ 。 所以我们可以手动模拟大小排序并去重。(蒟蒻只会模拟)~勿喷~。

AC代码:

CPP
#include<bits/stdc++.h>
using namespace std;
int a[90000001];
int b[90000001];
int main()
{
	int n,k,max=0,j=1,N=0,s=1;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>b[i]; 
	sort(b+1,b+1+n);
	for(int i=1;i<=n;i++)
		if(max<b[i]){
			a[j]=b[i];
			max=b[i];
			j++;
		}
	for(int i=1;i<=n;i++)
		if(a[i]!=0) N++;
	 
	if(N<k) {
        cout<< "No"<< endl;
        return 0;
    }
    
	for(int i=1;i<=N;i++){
		if(a[i]!=0 && a[i+1]!=0 && a[i+1]-a[i]==1)
			s++;
		else s=1;
		if(s>=k){
			cout<<"Yes"<<endl;
			return 0;
		}
	}
	cout<<"No"<<endl;
	return 0;
}

注意:ss 要等于 11

(喜欢的话就点个赞,关个注吧)

评论

0 条评论,欢迎与作者交流。

正在加载评论...