题目链接hdoj5522
一、题目分析
给定一个整数数组
An
,问是否存在三个不相等的下标i、j、k,满足
Ai
-
Aj
=
Ak
。测试数据不多于1000,3
≤
n
≤
100。
简单算下复杂度,三层循环暴力破解
106
,再算上1000个测试案例,感觉得跪,可又一细想,发现没那么坑:先sort排序,然后按照从大到小的顺序计算(也就是说保证了
Aj
和
Ak
均小于
Ai
),这样一来,复杂度实际上没有那么高,可暴力求解!
二、AC代码
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<cstdlib>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int a[105];
bool chuli(int n){
for(int i=n-1 ; i>=2 ; i--)
for(int j=n-2 ; j>=1 ; j--)
for(int k=n-3 ; k>=0 ; k--)
if(i!=j && i!=k && j!=k && a[i]-a[j]==a[k])
return true;
return false;
}
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=0 ; i<n ; i++)
scanf("%d",&a[i]);
sort(a,a+n);
if(chuli(n))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}