zoukankan      html  css  js  c++  java
  • cf 1237 C2. Balanced Removals (Harder)

    题意:

    三维空间上有n个点(无重点),n为偶数,要求进行n/2次操作,每次操作消除两个点,记为 (xa,ya,za)和(xb,yb,zb),需满足不存在点(xc,yc,zc),使得

    min(xa,xb)xcmax(xa,xb&& min(ya,yb)≤yc≤max(ya,yb) && min(za,zb)zcmax(za,zb)

    思路:

    对于x与y都相等点,排序,然后z相邻的那些一对一对的点就一定可以消除。

    然后就只剩下x相同的那些点,同理,再消除。

    最后,就没有x相同的点了,再消除。

    结束。

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <cmath>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    typedef long long int ll;
    const double pi = acos(-1);
    const int maxn = 1e5 + 10;
    struct node{
        int x,y,z,id;
        friend bool operator <(node a,node b){
            if(a.x != b.x)
                return a.x < b.x;
            else if(a.y != b.y)
                return a.y < b.y;
            else
                return a.z < b.z;
        }
    }p[maxn];
    int main()
    {
        int n;
        while(scanf("%d",&n) != EOF){
            for(int i = 1;i <= n;i++){
                p[i].id = i;
                scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
            }
            sort(p + 1,p + n + 1);
            for(int i = 1;i <= n - 1;i++){
                if(p[i].x == p[i + 1].x && p[i].y == p[i + 1].y){
                    printf("%d %d
    ",p[i].id,p[i + 1].id);
                    p[i].x = 1e9;
                    p[i + 1].x = 1e9;
                    i++;
                }
            }
            sort(p + 1,p + n + 1);
            for(int i = 1;i <= n - 1;i++){
                if(p[i].x == 1e9)
                    break;
                if(p[i].x == p[i + 1].x){
                    printf("%d %d
    ",p[i].id,p[i + 1].id);
                    p[i].x = 1e9;
                    p[i + 1].x = 1e9;
                    i++;
                }
            }
            sort(p + 1,p + n + 1);
            for(int i = 1;i <= n - 1;i+=2){
                if(p[i].x == 1e9)
                    break;
                printf("%d %d
    ",p[i].id,p[i + 1].id);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    OpenSSH免密码登录SSH2
    mysql_init调用卡住原因分析
    磁盘文件读性能测试
    madvise、fadvise、posix_madvise和posix_fadvise函数的使用
    进程间传递文件描述符fd
    Orace开源的异步IO编程库,特点是接口非常简单
    爱奇艺视频窗口显示不出来解决办法
    brk/sbrk和mmap行为分析程序
    编译boost,去掉不使用的组件
    第24课 经典问题解析二
  • 原文地址:https://www.cnblogs.com/InitRain/p/12417143.html
Copyright © 2011-2022 走看看