题解:P13733 [JOIGST 2025] 扑克 / Poker
题目大意
再给出的
- 将这些扑克牌按照牌上的正整数从小到大排序后,任意相邻两张牌上的正整数差为
1 。思路分析
比较相邻的两个数字,看它们的差值是否为
1 。为了确保顺子的单调递增或单调递减性,在处理数字之前需要先排序。由于相同的牌既不能帮助组成顺子,也不会影响结果。所以为了方便,可以将数组去重。AC Code
#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; }