[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(预处理+双指针)的主要内容,如果未能解决你的问题,请参考以下文章