HDU 5522 Numbers (暴力枚举)

来源:互联网 发布:玖富理财 知乎 编辑:程序博客网 时间:2024/06/07 04:56

题意:在一个数组里找是否有三个不同位置的数满足A=B+C
解答:先排序然后从大到小枚举i,把右边的数用一个数组标记其出现过,再枚举左边的数判断其加上Ai是否出现过.

#include<bits/stdc++.h>using namespace std;#define LL long long#define pb push_back#define cl(a,b) memset(a,b,sizeof(a))const int maxn=105;const int inf=1<<23;int a[maxn];map<int,int> mp;int main(){    int n;    while(~scanf("%d",&n)){        mp.clear();        for(int i=0;i<n;i++){            scanf("%d",&a[i]);            mp[a[i]]++;        }        sort(a,a+n);        for(int i=0;i<n;i++){            mp[a[i]]--;            for(int j=0;j<i;j++){                if(mp[a[i]+a[j]]){                    puts("YES");goto A;                }            }        }        puts("NO");        A:;    }    return 0;}
0 0