[51nod1267]4个数和为0(预处理+双指针)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[51nod1267]4个数和为0(预处理+双指针)相关的知识,希望对你有一定的参考价值。

题意:判断能否从序列中找出4个数的和为0。

解题关键:n^2预处理任意两个数的和,sort一下,双指针进行判定。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1002];
struct node{
    int x,y,sum;
}arr[1000002];
bool cmp(node &a,node &b){
    return a.sum<b.sum;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    int k=0;
    for(int i=0;i<n;i++) for(int j=0;j<i;j++){
        arr[k].x=i;
        arr[k].y=j;
        arr[k].sum=a[i]+a[j];
        k++;
    }
    sort(arr,arr+k,cmp);
    int l=0,r=k-1;
    bool flag=false;
    while(l<r){
        if(arr[l].sum+arr[r].sum==0&&arr[l].x!=arr[r].x&&arr[l].x!=arr[r].y&&arr[l].y!=arr[r].x&&arr[l].y!=arr[r].y){
            flag=true;
            break;
        }
        else if(arr[l].sum+arr[r].sum<0){
            l++;
        }else{
            r--;
        }
    }
    if(flag) printf("Yes\n");
    else printf("No\n");
    return 0;
} 

 

以上是关于[51nod1267]4个数和为0(预处理+双指针)的主要内容,如果未能解决你的问题,请参考以下文章

51Nod-1267-4个数和为0

[51nod] 1267 4个数和为0

51 nod 1267 4个数和为0

51nod 1267 4个数和为0

51nod 1267 4个数和为0

[51nod] 1267 4个数和为0 暴力+二分