AcWing 457. 珠心算测验
原题链接
简单
作者:
第一WA者金银花
,
2019-08-08 10:00:11
,
所有人可见
,
阅读 900
这道题的做法比较多,我是用二分查找来降低时间复杂度(n$^2$log$_n$,虽然n$^3$也稳过)
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,a[1001],ans;
int find(int q,int h,int sum){
if(q>h) return 0;
int mid=(q+h)>>1;
if(a[mid]==sum) return mid;
if(sum>=a[mid]) return find(mid+1,h,sum);
else return find(q,mid-1,sum);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
for(int i=3;i<=n;i++) for(int j=1;j<i;j++){
int k=find(1,i-1,a[i]-a[j]);
if(k&&k!=j){
ans++;
break;
}
}
printf("%d",ans);
return 0;
}
这个算法的时间复杂度是 $O(n^2logn)$ 吧hh
对哦(尴尬