传送门

先来考虑一下二维时的情况,那么对于 $x$ 相同的点,我们按 $y$ 排序,然后相邻的一对对消除

最后 $x$ 坐标相同的点最多剩下一个,那么此时所有点的 $x$ 坐标都不一样

再按 $x$ 把 $x$ 相邻的一对对删除即可

扩展到三维,显然也可以同样的思路,先把 $x,y$ 相同的点按 $z$ 一对对消除,然后在把 $x$ 相同的点按 $y,z$ 相邻的一对对消除

最后按 $x,y,z$ 相邻的一对对消除即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=5e4+;
int n;
struct dat {
int x,y,z,id;
inline bool operator < (const dat &tmp) const {
if(x!=tmp.x) return x<tmp.x;
return y!=tmp.y ? y<tmp.y : z<tmp.z;
}
}A[N];
bool vis[N];
int main()
{
n=read();
for(int i=;i<=n;i++)
A[i].x=read(),A[i].y=read(),A[i].z=read(),A[i].id=i;
sort(A+,A+n+);
int l=;
for(int i=;i<=n;i++)
if(l && A[i].x==A[l].x && A[i].y==A[l].y)
{
vis[i]=vis[l]=;
printf("%d %d\n",A[i].id,A[l].id);
l=;
}
else l=i;
l=; while(vis[l]) l++;
for(int i=l+;i<=n;i++)
{
if(vis[i]) continue;
if(l && A[i].x==A[l].x)
{
vis[i]=vis[l]=;
printf("%d %d\n",A[i].id,A[l].id);
l=;
}
else l=i;
}
l=; while(vis[l]) l++;
for(int i=l+;i<=n;i++)
{
if(vis[i]) continue;
if(l) printf("%d %d\n",A[i].id,A[l].id),l=;
else l=i;
}
return ;
}

Codeforces 1237C2. Balanced Removals (Harder)的更多相关文章

  1. C2. Balanced Removals (Harder) (幾何、思維)

    Codeforce 1237C2 Balanced Removals (Harder) (幾何.思維) 今天我們來看看CF1237C2 題目連結 題目 給你偶數個三維座標點,每次選其中兩點,如果兩點為 ...

  2. CF1237C2 【Balanced Removals (Harder)】

    这么妙的题怎么没人发题解啊 首先这是三维的,我们可以对其进行降维打击 先考虑一维怎么做? 我们可以对其该维坐标进行排序,按照顺序输出,可能会多余一个 那拓展到二维呢? 我们可以把它转化成一维,分成很多 ...

  3. [Codeforces 873B]Balanced Substring

    Description You are given a string s consisting only of characters 0 and 1. A substring [l, r] of s  ...

  4. CodeForces - 873B Balanced Substring(思维)

    inputstandard input outputstandard output You are given a string s consisting only of characters 0 a ...

  5. Codeforces 873B - Balanced Substring(思维)

    题目链接:http://codeforces.com/problemset/problem/873/B 题目大意:一个字符串全部由‘0’和‘1’组成,当一段区间[l,r]内的‘0’和‘1’个数相等,则 ...

  6. CodeForces - 999C Alphabetic Removals

    C - Alphabetic Removals ≤k≤n≤4⋅105) - the length of the string and the number of letters Polycarp wi ...

  7. Codeforces 1237F. Balanced Domino Placements

    传送门 很妙的题 首先先考虑一个简化的问题,现在有一行格子让你填 你要么填一格 要么填两格 有的格子不让你填 问你填了 $a$ 个一格和填了 $b$ 个两格有多少种方案 那么显然先只考虑放两格的方案, ...

  8. Codeforces 1237E. Balanced Binary Search Trees

    传送门 这一题是真的坑人,时间空间都在鼓励你用 $NTT$ 优化 $dp$...(但是我并不会 $NTT$) 看到题目然后考虑树形 $dp$ ,设 $f[i][0/1]$ 表示 $i$ 个节点的树,根 ...

  9. Codeforces 1237D. Balanced Playlist

    传送门 首先显然的,如果一个位置开始播放了两圈还没结束,那么就永远不会结束 先考虑位置 $1$ 开始播放,用一个 $multisetset$ 维护一下当前听的所有歌,直到某一首歌 $r$ 不合法了就停 ...

随机推荐

  1. Qt5.11.2 VS2015编译activemq发送程序 _ITERATOR_DEBUG_LEVEL错误和崩溃解决

    1.问题描述: 运行环境是 win10 64位系统,开发环境是VS2015 ,Qt 5.11.2.开发activemq发送程序,遇到问题 (1)Qt5AxContainer.lib error LNK ...

  2. vue 复制内容到粘贴板

    首先是npm安装依赖包:npm install clipboard --save 导入组件:import Clipboard from "clipboard"; html如图: c ...

  3. Leetcode题目160.相交链表(简单)

    题目描述 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = ...

  4. RHEL 7.6系统安装配置图解教程

  5. Qt Model/View 的简单说明

    目录: (一) Qt Model/View 的简单说明 .预定义模型 (二)使用预定义模型 QstringListModel例子 (三)使用预定义模型QDirModel的例子 (四)Qt实现自定义模型 ...

  6. PHP md5() 函数

    PHP String 函数 实例 计算字符串 "Hello" 的 MD5 散列: <?php $str = "Shanghai"; echo md5($s ...

  7. RabbitMQ学习之:(四)回头看刚才写的程序 (转贴+我的评论)

    转自:http://lostechies.com/derekgreer/2012/03/18/rabbitmq-for-windows-hello-world-review/ 我的心得: 1. 在创建 ...

  8. 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解

    笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解     简介:讲解常用的服务间的调用方式 RPC:             远程过程调用,像调用本地 ...

  9. Python AES加密

    使用pycrypto模块https://pypi.python.org/pypi/pycrypto/ >>> from Crypto.Cipher import AES>> ...

  10. LeetCode.1189-balloon实例数最大值(Maximum Number of Balloons)

    这是小川的第次更新,第篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第267题(顺位题号是1189).给定一个字符串文本,使用文本字符来构成单词"balloon&qu ...