BC 61 Numbers
来源:互联网 发布:java messagedigest 编辑:程序博客网 时间:2024/06/01 09:26
Numbers
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/262144 K (Java/Others)
问题描述
给n个数A1,A2....An{A}_{1},{A}_{2}....{A}_{n},从中选3个位置不同的数A,B和C,问是否有一种情况满足A-B=C.
输入描述
输入有多组数据,不超过1000组.每组数据第一行包含一个整数n,随后一行n个整数A1,A2....An.(3≤n≤100,0≤Ai≤10000\leq {A}_{i}\leq 10000)
输出描述
对于每组数据如果符合条件输出"YES",否则输出"NO".
输入样例
33 1 231 0 241 1 0 2
输出样例
YESNOYES先排序然后从大到小枚举i,把右边的数用一个数组标记其出现过,
再枚举左边的数判断其加上Ai是否出现过.
这道题题解是采用的数组进行标记的,我是用枚举+二分查找。
#include <stdio.h>#include <algorithm>const int maxn = 1005;int a[maxn];inline int Max ( int a, int b ){ return a > b ? a : b;}int binary_search ( int k, int l, int r, int s, int pos ){ int m; //采用二分求下界的方法,然后不能是下标s和pos while ( l < r ) { m = l+( r-l )/2; if ( a[m] == k && m != s && m != pos ) return 1; if ( a[m] >= k ) r = m; else l = m+1; } return 0;}int main ( ){ int n, cnt, flag; while ( ~ scanf ( "%d", &n ) ) { for ( int i = 0; i < n; i ++ ) scanf ( "%d", &a[i] ); std :: sort ( a, a+n ); flag = 1; for ( int i = 0; i < n && flag; i ++ ) //枚举两层查找 { for ( int j = 0; j < n && flag; j ++ ) { if ( i == j ) continue ; if ( binary_search ( a[i]-a[j], 0, n-1, i, j ) ) flag = 0; } } printf ( flag ? "NO\n" : "YES\n" ); } return 0;}/*0 0*/
0 0
- BC 61 Numbers
- BC 61 Game
- BC 61 Subtrees
- bc
- bc
- bc
- bc
- BC
- BC
- BC 61 (div.2) A
- hdu 5676 ztr loves lucky numbers(BC——暴力打表+二分查找)
- 【CUGBACM15级BC第19场 A】hdu 5108 Alexandra and Prime Numbers
- BC右键
- BC#33
- BC #34
- BC 水水就好
- BC #38
- BC#47
- codeforces PawnChess
- 字符串四则运算之三无限位数相乘的设计
- 字符串四则运算之四无限位数相除的设计
- codeforces B. The Monster and the Squirrel
- Android性能优化典范
- BC 61 Numbers
- UESTC1218 2015CCPC DP 0,1背包
- Editplus和Notepad++设置默认编码
- BC 61 Game
- File
- (第二部分)容器和算法——顺序容器
- red hat使用
- JAVA编程中g.drawImage(pict, a, b, 50, 50, this);函数出错
- 国家商用密码(七)在Apache MINA上实现二进制流的SM4编解码器