IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2)——A - Bear and Three Balls(unique函数的使用)
2016-04-02 09:13
609 查看
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
output
input
output
input
output
Note
In the first sample, there are 4 balls
and Limak is able to choose three of them to satisfy the rules. He must must choose balls with sizes18, 16 and 17.
In the second sample, there is no way to give gifts to three friends without breaking the rules.
In the third sample, there is even more than one way to choose balls:
Choose balls with sizes 3, 4 and 5.
Choose balls with sizes 972, 970, 971.
题目本身不难,就是问你有没有三个连续的数字,比如1 2 3,45 46 47这样的,如果你用等差数列去判断,那存在一个坑点就是1 2 2 3,这样不是等差数列,但是也是可行的即输出YES。因此用了unique函数,这个函数的作用是把一个排序后的数组合并连续区间内相同的数字,比如1 2 2 2 3会变成1 2 3,那么剩下的两个2去哪了呢,被移到了数组的末尾。此函数本身返回一个完成合并区间的超尾指针,跟.end()差不多。因此使用之后的数组大小应该是N=unique(list,list+n)-list;
代码:
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
Note
In the first sample, there are 4 balls
and Limak is able to choose three of them to satisfy the rules. He must must choose balls with sizes18, 16 and 17.
In the second sample, there is no way to give gifts to three friends without breaking the rules.
In the third sample, there is even more than one way to choose balls:
Choose balls with sizes 3, 4 and 5.
Choose balls with sizes 972, 970, 971.
题目本身不难,就是问你有没有三个连续的数字,比如1 2 3,45 46 47这样的,如果你用等差数列去判断,那存在一个坑点就是1 2 2 3,这样不是等差数列,但是也是可行的即输出YES。因此用了unique函数,这个函数的作用是把一个排序后的数组合并连续区间内相同的数字,比如1 2 2 2 3会变成1 2 3,那么剩下的两个2去哪了呢,被移到了数组的末尾。此函数本身返回一个完成合并区间的超尾指针,跟.end()差不多。因此使用之后的数组大小应该是N=unique(list,list+n)-list;
代码:
#include<iostream> #include<algorithm> #include<cstdlib> #include<sstream> #include<cstring> #include<cstdio> #include<string> #include<deque> #include<cmath> #include<queue> #include<set> #include<map> using namespace std; int list[100]; int main (void) { int n,i,j,k; while (cin>>n) { memset(list,0,sizeof(list)); bool flag=0; for (i=0; i<n; i++) { cin>>list[i]; } sort(list,list+n); int *p=unique(list,list+n); int k=p-list; for (i=0; i<k-2; i++) { if(list[i]+1==list[i+1]&&list[i+1]+1==list[i+2]&&list[i]+2==list[i+2]) { flag=true; break; } } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
相关文章推荐
- 编程异常——假设你报createSQLQuery is not valid without active transaction,...
- DuiLib(1)——简单的win32窗口
- (NOT OK) How To Build CyanogenMod Android for Motorola Defy ("jordan")
- Microsoft Build 2016之Xamarin 的重磅消息
- js构建ui的统一异常处理方案(二)
- js构建ui的统一异常处理方案(二)
- MySQL-QueryCache查询缓存
- winform 换个皮肤
- UIScrollView控件介绍
- JTouch (Remote GUI) - 最纯粹简约的GUI即时通讯工具
- Build failed in step 'Installing CLooG for host'
- Java的break和continue使用示例
- OC高效率52之不要使用dispatch_get_current_queue
- Your build settings specify a provisioning profile
- 自定义UITableViewCell实现左滑动多菜单功能LeftSwipe
- UiAutomator中android.widget.ListView控件的子元素遍历
- 在Xcode 6.2中遇到Your build settings specify a provisioning profile with the UUID, no provisioning prof
- android项目中values中几个…
- Incorrect string value: '\xC2\x8B\xC3\xA8\xC2\xAF...' for column 'name' at row 1
- RFC(Request For Comments)征求修正意见书