#include<iostream>
#include<algorithm>
using namespace std;
//**************常量****************//
const int MAX=1001;
int N;
//*************算法变量************//
pair<int,int> point[MAX];
int main()
{
int l,ax,ay,bx,by,dx,dy,count=0;
pair<int,int> temp1;
pair<int,int> temp2;
while(~scanf("%d",&N)&&N)
{
//输入结点
for(int i=1;i<=N;i++)
{
scanf("%d%d",&point[i].first,&point[i].second);
}
//排序
sort(point+1,point+N+1);//
count=0;
for(int i=1;i<=N;i++)
{
for(int j=i+1;j<=N;j++)
{
if(point[j].second==point[i].second)
{
l=point[i].first-point[j].first;
ax=point[j].first;
by=ay=point[j].second-l;
bx=point[i].first;
temp1.first=ax;
temp1.second=ay;
temp2.first=bx;
temp2.second=by;
if(binary_search(point+1,point+N+1,temp1)&&binary_search(point+1,point+N+1,temp2)) count++;
}
else if(point[i].second>point[j].second)
{
dx=point[i].first-point[j].first;
dy=point[i].second-point[j].second;
ax=point[j].first+dy;
ay=point[j].second-dx;
bx=point[i].first+dy;
by=point[i].second-dx;
temp1.first=ax;
temp1.second=ay;
temp2.first=bx;
temp2.second=by;
if(binary_search(point+1,point+N+1,temp1)&&binary_search(point+1,point+N+1,temp2)) count++;
}
}
}
printf("%d\n",count);
}
return 0;
}
Pair模版是C++ STL中短小精干的结构体,map和multimap都利用了很多pair对组模版,即<键/值>为成对元素,另外函数需要返回两个值的时候,也常用pair模版(当然,结构体也一样方便)。
pair数据结构:
Pair的定义:
std::pair<int,std::string> p(3,“yaoyao”);(C++ 所有标准都是定义在std名称空间中的)
这样一来可以通过 p.first 访问 3 , p.second 访问 ”yaoyao”。
Pair的比较:
两个pair类型的变量也可以进行比较大小,但是他们的比较具有优先性,也就是当first与first比较,如果可以比较出结果时,就停止比较,以first比较结果为准,否则才进行second的比较。
例:std::pair<int,std::string> p1(5,”abc”),p2(4.”abc”),p3(5.”abb”);
比较可知 p1>p2 p1<p3 p2<p3.
当且仅当first与second都相等时,他们才相等。
当且仅当first与second都相等时,他们才相等。
便捷函数make_pair():该函数也可以进行两个成员的代替,好处是不需要指明成员变量类型。使用起来更方便快捷。
例:
用pair表示: std::pair<int,std::string> p(5,”yaoyao”); 将p插入到容器中insert(p);
用make_pair: insert ( make_pair(5,”yaoyao”) );
通过比较可以看到使用make_pair不需要中间变量和类型说明,比较方便。
当然也不是以后都使用make_pair,有些地方需要确切的指明类型,例如对于float的3.14,make_pair会把它当成double处理。所以某些情况下也会带来一定的麻烦。