专栏文章
题解:P13733 [JOIGST 2025] 扑克 / Poker
P13733题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioak5c3
- 此快照首次捕获于
- 2025/12/02 16:03 3 个月前
- 此快照最后确认于
- 2025/12/02 16:03 3 个月前
题目大意
再给出的 张牌中,找到长度为 的顺子。题目中给出的顺子的定义是:
- 将这些扑克牌按照牌上的正整数从小到大排序后,任意相邻两张牌上的正整数差为 。
思路分析
比较相邻的两个数字,看它们的差值是否为 。为了确保顺子的单调递增或单调递减性,在处理数字之前需要先排序。由于相同的牌既不能帮助组成顺子,也不会影响结果。所以为了方便,可以将数组去重。
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 条评论,欢迎与作者交流。
正在加载评论...