https://vjudge.net/problem/POJ-2785
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<set> #include<algorithm> #include<map> #define maxn 4005 typedef long long ll; using namespace std; int n; ll a[maxn],b[maxn],c[maxn],d[maxn]; ll cd[maxn*maxn];//记录c和d数组的和的数组 int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) { cin>>a[i]>>b[i]>>c[i]>>d[i]; } //把c和d的和组成cd数组 for(int i=0;i<n;i++) for(int j=0;j<n;j++){ cd[i*n+j]=c[i]+d[j]; } sort(cd,cd+n*n); ll res=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { //cout<<"a"<<endl; ll ans=-(a[i]+b[j]); res+=upper_bound(cd,cd+n*n,ans)-lower_bound(cd,cd+n*n,ans); // 返回第一个大于等于ans的位置 返回第一个大于ans的位置 //最后返回相等ans的位置 } cout<<res<<endl; } return 0; }
原文地址:https://www.cnblogs.com/huangzzz/p/9279539.html
时间: 2024-10-30 03:59:35