您的位置:首页 > 其它

BestCoder61(div.2)1001---hdoj 5522 Numbers

2015-11-01 10:57 246 查看
题目链接hdoj5522

一、题目分析

给定一个整数数组AnA_n,问是否存在三个不相等的下标i、j、k,满足AiA_i-AjA_j=AkA_k。测试数据不多于1000,3≤\leqn≤\leq100。

简单算下复杂度,三层循环暴力破解10610^6,再算上1000个测试案例,感觉得跪,可又一细想,发现没那么坑:先sort排序,然后按照从大到小的顺序计算(也就是说保证了AjA_j和AkA_k均小于AiA_i),这样一来,复杂度实际上没有那么高,可暴力求解!

二、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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: