txh0609

导航

 

题目描述

比太郎持有 $N$ 张卡片,第 $i$ 张卡片($1 \le i \le N$)上写有一个整数 $A_i$。他希望从这些卡片中选出满足以下条件的三张卡片。

条件:

  • 选出的三张卡片上所写的整数彼此相差 $3$。更精确地说,选出的三张卡片上的整数可以表示为某个整数 $x$,以及 $x+3$、$x+6$。

例如,若比太郎持有 $5$ 张卡片,上面分别写着 $2, 4, 5, 7, 10$,则选择写有 $4, 7, 10$ 的三张卡片即可满足条件。

给定比太郎所持卡片的信息,请编写一个程序,判断是否能够选出满足条件的三张卡片。

输入格式

输入以如下格式给出:

$N$

$A_1\ A_2\ \cdots\ A_N$

输出格式

若能够选出满足条件的三张卡片,则输出 Yes;否则输出 No

这道题用一个桶,记录出现了的数,最大往后数六个,就可以找到目标卡片,否则输出‘No’.

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
bool a[N];
int n,x,maxx=-1;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x;
        a[x]=1;//记录出现的卡牌
        maxx=max(maxx,x);//找最大值
    }
    for(int i=1;i<=maxx-6;i++){ 
        if(a[i]&&a[i+3]&&a[i+6]){
            cout<<"Yes";//找到输出Yes
            return 0;
        }
    }
    cout<<"No";//没找到输出No
    return 0;
}
posted on 2026-05-06 09:43  txh0609  阅读(9)  评论(0)    收藏  举报