- // 二分查找
- int find(int left,int right,int x){
- mid=(left+right)/2;
- while(left<right)
- x<mid?right=mid-1:left=mid+1;
- return left-1;
- }
- #include<cstdio>
- #include<algorithm>
- ?
- using namespace std;
- ?
- int main(){
- int i,j,n,count=0;
- int left,right,mid;
- int a[4000][4];
- int c[16000001],d[16000001];
- scanf("%d",&n);
- while(n--){
- for(i=0;i<n;i++)
- for(j=0;j<4;j++)
- scanf("%d",&a[i][j]);
- } // 读取数据
- for(i=0;i<n;i++){
- c[i*10+j]=a[i][0]+a[i][1];
- d[i*10+j]=a[i][2]+a[i][3];
- } // 存储数据
- sort(d,d+n*n); // 排序
- for(int i=0;i<n*n;i++)
- {
- left=0;
- right=n*n-1;
- while(left<right){
- mid=(left+mid)/2;
- if(d[mid]>=-c[i])
- mid=right;
- else
- mid=left+1;
- } // 二分查找
- if(left==right){
- if(d[mid]==c[i])
- count++;
- else
- break;
- }
- }
- printf("%d\n",count);
- if(n) putchar('\n');
- }
来源: http://www.bubuko.com/infodetail-3112655.html