poj2002 STL pair解法
2014-11-21 10:42
435 查看
#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处理。所以某些情况下也会带来一定的麻烦。
相关文章推荐
- (STL中自带的排序功能7.3.3)POJ 1318 Word Amalgamation(求解一个单词是否在字典里面。解法:将单词按字典序处理后的结果与字典中的单词安字典序处理后的结果进行比较)
- poj 1338 Ugly Numbers(STL 之 pair)
- poj 2002 Squares 【stl二分】
- Poj 2002 Squares(二分&&STL)
- POJ 3297 Open Source STL(map+set+pair)
- poj 3253 Fence Repair 哈夫曼最优解STL解法
- STL的pair学习, map学习
- C++ STL pair
- Maximum Length of Pair Chain问题及解法
- POJ 1833 排列(全排列 STL)
- POJ 1979 dfs和bfs两种解法
- STL中的模板类pair 和map
- poj 2002 Squares
- STL赏析——pair
- poj2002 排序+哈希
- POJ 2418 Hardwood Species(STL map or Trie tree)
- POJ-1028 Web Navigation(STL)
- POJ-5353-Fence Repair(哈夫曼问题->贪心(一种解法两种做法))
- POJ 2002 二分 计算几何
- poj 2002 Squares 判断一些点能组成多少个正方形 二分查找