您的位置:首页 > 其它

UVA 1152 数组和

2016-10-23 08:51 357 查看
一个有趣的题目,时间要求是9s,数据特别大,只有 O(n2logn) 才能过

Accepted

C++11

2.680

2016-10-23 00:46:48

题目:https://uva.onlinejudge.org/external/11/1152.pdf

这题有一个核心思想,是使用二分上界查询-二分下界查询得到个数

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

int main(){
int CASE,n,a[4005],b[4005],c[4005],d[4005];
scanf("%d",&CASE);
while (CASE--) {
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
int sum=0;

int middleSum[20000000];
int t=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
middleSum[t++]=a[i]+b[j];
sort(middleSum, middleSum+t);

for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
sum+=upper_bound(middleSum, middleSum+t,-c[i]-d[j])-lower_bound(middleSum, middleSum+t, -c[i]-d[j]);

printf("%d\n",sum);
if(CASE) printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva