CodeForces 653 A. Bear and Three Balls——(IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2))

传送门

A. Bear and Three Balls

time limit per test
2 seconds

memory limit per test
256 megabytes

input
standard input

output
standard output

Limak is a little polar bear. He has n balls, the i-th
ball has size ti.

Limak wants to give one ball to each of his three friends. Giving gifts isn't easy — there are two rules Limak must obey to make friends happy:

  • No two friends can get balls of the same size.
  • No two friends can get balls of sizes that differ by more than 2.

For example, Limak can choose balls with sizes 4, 5 and 3,
or balls with sizes 90, 91 and 92.
But he can't choose balls with sizes 5, 5and 6 (two
friends would get balls of the same size), and he can't choose balls with sizes 30, 31 and 33 (because
sizes 30 and 33 differ by more than 2).

Your task is to check whether Limak can choose three balls that satisfy conditions above.

Input

The first line of the input contains one integer n (3 ≤ n ≤ 50) —
the number of balls Limak has.

The second line contains n integers t1, t2, ..., tn (1 ≤ ti ≤ 1000)
where ti denotes the size
of the i-th ball.

Output

Print "YES" (without quotes) if Limak can choose three balls of distinct sizes, such that any two of them differ by no more than 2.
Otherwise, print "NO" (without quotes).

Examples

input

4
18 55 16 17

output

YES

input

6
40 41 43 44 44 44

output

NO

input

8
5 972 3 4 1 4 970 971

output

YES

题目大意:

就是给定 n 个数,让你求的就是是否存在三个连续的数。。。

解题思路:

这个题本来这么简单不想写的,但是突然发现一个函数还是比较不错的,unique(),就是这个函数,本来我是打算暴力的后来一寻思太麻烦了,就用集合写的,写到一半突然发现迭代器 it 不能加2,所以炸了,后来就用一个数组存的每一个*it 的数,有点小麻烦,具体看我第一个代码

My First AC Code:

<span style="font-size:18px;">#include <iostream>
#include <algorithm>
#include <set>
#include <cstdio>
#include <cstring>
using namespace std;
set <int> s;
set <int> ::iterator it;
int a[105];
int main()
{
    int n, x;
    while(cin>>n)
    {
        for(int i=0; i<n; i++)
        {
            cin>>x;
            s.insert(x);
        }
        memset(a, 0, sizeof(a));
        int cnt = 0;
        for(it=s.begin(); it!=s.end(); it++)
            a[cnt++] = *it;///每个都存一遍 实在是没招了 set学的不好呀。。。
        bool ok = 0;
        for(int i=1; i<cnt; i++)
        {
            if(a[i]==a[i-1]+1 && a[i]+1==a[i+1])
            {
                ok = 1;
                break;
            }
        }
        if(ok)
            puts("YES");
        else
            puts("NO");
    }
    return 0;
}</span>

接下来我要说的就是这篇博客的重点了(有没有想到高中老师呀...)介绍一个 STL 算法,unique(),这个函数是用来去重的,这还是我一队友告诉我的呢,我感觉自己好low啊,我详细的说一下:

unique的功能是去除相邻的重复元素(只保留一个),其实它并不是真正意思上的把重复的元素删除,只是把重复的元素移到后面去了,然后还是保存到了原数组中,然后
返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

int tmp = unique(a,a+n)-a;我们只需要写上这么一句话,就行了,别忘了最后还得减a因为这个函数返回的就是地址,所以要减去,而tmp这个变量里存的就是去重之后的数组的长度,还是比较不错的吧,上我第二个代码:

My Second AC Code:

<span style="font-size:18px;">#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int a[105];
int main()
{
    int n, x;
    while(cin>>n)
    {
        for(int i=0; i<n; i++)
            cin>>a[i];
        sort(a,a+n);
        int tmp = unique(a,a+n)-a;///头文件 <algorithm>,还是挺好的,去重用的
        bool ok = 0;
        for(int i=1; i<tmp; i++)
        {
            if(a[i]==a[i-1]+1 && a[i]+1==a[i+1])
            {
                ok = 1;
                break;
            }
        }
        if(ok)
            puts("YES");
        else
            puts("NO");
    }
    return 0;
}
</span>
时间: 2024-08-03 18:08:17

CodeForces 653 A. Bear and Three Balls——(IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2))的相关文章

前端的小玩意(9.5)——做一个仿360工具箱的web页面(完结篇,可以跑起来的工具箱)

DEMO网址: http://jianwangsan.cn/toolbox (五)添加.点击和移动的逻辑 我反思了一下,在(四)中我写的并不好,事实上,无论是大按钮,还是被添加到我的工具,或者是添加到常用工具栏,他都是一个按钮,因此,应该共享状态,即他们属于同一个tool实例,并能互相影响.   需求分析: 在重写Tool类之前,需要明确分析按钮的逻辑. 在全部工具页面: ①当按钮未被添加时,鼠标移动上去会有添加按钮显示: ②当按钮未被添加时,鼠标无论点击按钮本身还是点击添加按钮,都执行添加逻辑

php-PHP学习书籍(期望推荐一下比较好的自学书籍)

问题描述 PHP学习书籍(期望推荐一下比较好的自学书籍) 本人之前学过一些.net 的基础只是,现在想学一学php,但是不知道什么书好一些,想请教一下,也请给点意见,希望大家推荐一下关于学习php的书籍 解决方案 我刚开始自学的时候,是直接下载完w3school文档. 不过建议去网上搜索一下笔记.等熟悉之后,就找一些习题去做.我主要学得框架是thinkPHP和ci也结合smarty一起用.至于为了开发方便,你也可以了解二次开发,像ecshopdedecms,wordpress这些都很好用.能帮助

visual studio 2010怎么用keil c51编译?(网上的教程不太懂,初学者)

问题描述 visual studio 2010怎么用keil c51编译?(网上的教程不太懂,初学者) 我看了一些网上的教程,但是有的不懂,所以很久都没有成功.望指点!十分感谢! 解决方案 keil c51有一个workbench,外观和VC++一样,直接就可以用.

请问xamarin种,如何打开数据链接(如果检测到没有网络的情况下)

问题描述 请问xamarin种,如何打开数据链接(如果检测到没有网络的情况下) 请问xamarin种,如何打开数据链接(如果检测到没有网络的情况下)thank in advance 解决方案 https://msdn.microsoft.com/zh-cn/magazine/mt147239.aspx

never sliderbar(js版简单的滑动条控件)

js|控件 web滑动条,web滚动条,js滚动条,滑动条控件,js Sliderbar 已经再次更新:支持实时监控sliderbar的数据,允许有callback回调的函数,有示例,持续更新中......   1.可自定样式SetStyle() 2.带有onSroll功能 3.有setSldPoint(设置位置)接口 4.有getSldPoint(取得位置)接口 5.可自己设置sliderBar的最大值(不是sliderbar的长度,而是值) 6.自定义微调功能(setIncrement(10

猪八戒的起源(我是一头莽撞而又幸运的猪)

刚才看到了鱼写的<落伍的起源(我是一条幸运的鱼)>,一时兴起,仿鱼的标题和叙述风格,写下本篇<猪八戒的前世今生(我是一头莽撞而又幸运的猪)>. 1997年中国发生了两件大事,一是香港回归,二是重庆直辖.对于我个人而言,发生了一件大事,那就是遭遇电脑.当时我在四川教育学院离职学习,总共上了半学期的计算机课,机器是286,学了些乱七八糟的DOS命令,唯一的收获是学会了五笔打字. 从教院毕业后我回老家做了个乡干部,专职写通讯报道之余也偶尔去做些"催粮催款.刮宫引产"的

TIMESTAMP列类型详解(怎样设列的默认值为Now())

详解 TIMESTAMP列类型详解(怎样设列的默认值为Now()) MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型下面就详细说明TIMESTAMP列类型 TIMESTAMP列类型TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示.TIMESTAMP值显示尺寸的格式如下表所示::+---------------+----------------+| 列类型      

Passport 你的网站(在你的WebSite上实现MS Passport )下

web Passport 你的网站 (下)         -------(在你的WebSite上实现MS Passport ) 小气的神 2001-11-12   Article Type: In-Depth              难度等级:4/9        版本:1.01 3.     切换并接触一下Microsoft .NET My Services Manager.这一节中,我们去接触一下Microsoft .NET My Services Manager,为了方便我用了SDK带

Passport 你的网站(在你的WebSite上实现MS Passport )上

web Passport 你的网站 (上)        -------(在你的WebSite上实现MS Passport ) 小气的神  2001-11-12   Article Type: In-Depth              难度等级:4/9        版本:1.01 Passport 最早出现在1999年,当时只是为满足MS收购HotMail后作为邮箱的登录和授权服务,默默无闻.一年之后人们开始知道它了,真正引起争议的是MS在Hotmail张贴的一例用户使用条款,被认为侵犯个人