码迷,mamicode.com
首页 > 编程语言 > 详细

排序+stl——cf1237C

时间:2019-10-23 11:15:04      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:its   amp   define   ==   F12   using   ace   sort   it!   

先排序,把所有x坐标相同的放到同一个vector里去,然后对每个vector里的都是二维点,很好求,然后最后再把剩下的对匹配了

#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 100005

struct Node{int x,y,z,id;}p[N];
int cmp1(Node & a,Node & b){
    if(a.y==b.y)return a.z<b.z;
    return a.y<b.y;
}

int n;
map<int,vector<Node> >mp;
map<int,vector<Node> >::iterator it;

vector<Node>Left;
void calc(vector<Node> &v){//所有x相等的点 
    vector<Node> left;
    left.clear();
    sort(v.begin(),v.end(),cmp1); 
    for(int i=0;i<v.size();){
        if(i+1<v.size()){
            if(v[i].y==v[i+1].y){
                cout<<v[i].id<<" "<<v[i+1].id<<\n;
                i+=2;
            }    
            else {
                left.push_back(v[i]);
                i++;
            }    
        }
        else {
            left.push_back(v[i]);
            break;
        }
    }
    
    while(left.size()>=2){
        cout<<left.back().id<<" ";
        left.pop_back();
        cout<<left.back().id<<"\n";
        left.pop_back();
    }
        
    if(left.size())
        Left.push_back(left.back()); 
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
        p[i].id=i;
        mp[p[i].x].push_back(p[i]);
    }
    
    for(it=mp.begin();it!=mp.end();it++){
        calc(it->second);
    }
    
    for(int i=1;i<Left.size();i+=2)
        cout<<Left[i].id<<" "<<Left[i-1].id<<"\n";
}

 

排序+stl——cf1237C

标签:its   amp   define   ==   F12   using   ace   sort   it!   

原文地址:https://www.cnblogs.com/zsben991126/p/11725017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!