题解:P13733 [JOIGST 2025] 扑克 / Poker
zhujianheng · · 题解
观察到一个性质,这个牌组为顺子当且仅当它在排完序的数组里面正好是公差为
然后只要询问这样的等差数列存不存在就可以了。
对于这样的询问,我们考虑排序后的数组
假设我们当前遍历到第
如果
如果
如果
这样,如果最后还没有找到顺子长度等于
Code:
#include<bits/stdc++.h>
using namespace std;
const int N=300009;
int a[N];
int main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
int cnt=1;
for(int i=2;i<=n;i++)
if(a[i]==a[i-1]+1){
cnt++;
if(cnt==k){
cout<<"Yes"<<endl;
return 0;
}
}
else if(a[i]==a[i-1]) continue;
else cnt=1;
cout<<"No"<<endl;
return 0;
}