51nod 1267 四个数和为0 ( 如何用lower_bound查结构体里的值)

 
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。

Input

 
    

第1行,1个数N,N为数组的长度(4 <= N <= 1000) 第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)

Output

 
    

如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。

Input示例

 
    

5 -1 1 -5 2 4

Output示例

 
    

Yes


首先说一下题的思路,两两配对,用结构体存放两个数的和以及这两个数的坐标,再判断只要和为0并且坐标不同就可以

结构体里用二分用到了友元函数的知识(谭浩强牛逼)

#include 
#include 
#include 
using namespace std;
typedef long long ll;
const int maxn=105;
const int mod=7;
ll N,A[1005],ans;
struct Why
{
    ll sum;
    ll x;
    ll y;
      friend bool operator <( Why a, Why b ) // 这就是重点了,需要手动在结构体里添加小于号的重载
      {
          return a.sum>N;
    for(int i=0;i>A[i];
    for(int i=0;i

你可能感兴趣的:(51nod 1267 四个数和为0 ( 如何用lower_bound查结构体里的值))