专栏文章

题解:P13733 [JOIGST 2025] 扑克 / Poker

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

文章操作

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

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

题目大意

再给出的 NN 张牌中,找到长度为 KK 的顺子。题目中给出的顺子的定义是:
  • 将这些扑克牌按照牌上的正整数从小到大排序后,任意相邻两张牌上的正整数差为 11

思路分析

比较相邻的两个数字,看它们的差值是否为 11。为了确保顺子的单调递增或单调递减性,在处理数字之前需要先排序。由于相同的牌既不能帮助组成顺子,也不会影响结果。所以为了方便,可以将数组去重。

AC Code

CPP
#include<bits/stdc++.h>
using namespace std;
//#define int long long 
const int N=3e5+1013;
set <int> s;//利用set去重 
int a[N];
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int n,k,x;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>x;
		s.insert(x);
	}
	int i=1;
	for(set<int>::iterator it=s.begin();it!=s.end();it++,i++){
		a[i]=*it;
	}//set自动从小到大排序,所以我这里就不用排序了
	int cnt1=1,cnt2=0;//cnt1:当前最长顺子的长度  cnt2:最长顺子的长度 
	for(int i=1;i<=n;i++){
		if(a[i]+1==a[i+1]) cnt1++;
		else cnt2=max(cnt2,cnt1), cnt1=1;
	}
	if(cnt2>=k) cout<<"Yes";
	else cout<<"No";
	return 0;
} 

评论

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

正在加载评论...