zoukankan      html  css  js  c++  java
  • 【杂题集】【51NOD 1267】4个数和为0

    4个数和为0 

    链接:

            原题

    题意:

                ... 这

    思路:

            由于(n=1000),O(n^2)的算法也可一试。

            于是求任意两数的和,转化为两数之和问题,再判断重复即可。

            但我感觉这道题略坑?总感觉我的代码有问题...

     

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    struct FormNumber {
        int num;
        int a,b;
    };
    
    int N,FN;
    int Num[1000+100];
    FormNumber FNum[499500+100];
    
    bool FormNumberCmp (FormNumber a,FormNumber b) {
        if (a.num==b.num)
            if (a.a<b.a)
                return a.b<b.b;
            else return a.a<b.a;
        else return a.num<b.num;
    }
    
    inline bool IsFormNumberNotOver (FormNumber a,FormNumber b) {
        if ((a.a!=b.a)&&(a.b!=b.b)&&(a.a!=b.b)&&(a.b!=b.a)) return true;
      return false;   
    }
    
    int main () {
        ios::sync_with_stdio(false);
        cin>>N;
        for(int i=1; i<=N; i++) cin>>Num[i];
        for(int i=1; i<N; i++)
            for(int j=i+1; j<=N; j++)
                FNum[++FN]=(FormNumber) {Num[i]+Num[j],i,j};
        sort(FNum+1,FNum+FN+1,FormNumberCmp);
        int l=1,r=FN;
        while (l<r) {
            if (FNum[l].num+FNum[r].num==0&&IsFormNumberNotOver(FNum[l],FNum[r])) {
                cout<<"Yes";
                return 0;    
            }
            if (FNum[l].num+FNum[r].num>0) r--;
            else l++;
        }
        cout<<"No";
        return 0;
    }

     

  • 相关阅读:
    Unity3D鼠标点击处
    Unity3D静态AI自动寻路
    Unity3D 雷达检测器
    Unity3D重新加载光线变暗问题
    Unity3D切换场景不销毁物体
    软件&环境&网页
    2020软件工程作业05
    2020软件工程作业04
    利用Java输入输出流更改文件中指定的内容
    2020软件工程作业03
  • 原文地址:https://www.cnblogs.com/Ztraveler/p/7046019.html
Copyright © 2011-2022 走看看