CF1237C2 【Balanced Removals (Harder)】
这么妙的题怎么没人发题解啊
首先这是三维的,我们可以对其进行降维打击
先考虑一维怎么做?
我们可以对其该维坐标进行排序,按照顺序输出,可能会多余一个
那拓展到二维呢?
我们可以把它转化成一维,分成很多个一维后执行上述操作,把一维中多的一些点存下来,可以保证这些点的一维值两两不等,于是按照另一维坐标输出就行了
那三维呢?
其实和二维是一样的,用类似操作转化成二维即可
\(Code:\)
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
il int read() {
re int x = 0, f = 1; re char c = getchar();
while(c < '0' || c > '9') { if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
return x * f;
}
#define rep(i, s, t) for(re int i = s; i <= t; ++ i)
#define maxn 100005
struct node {
int x, y, z, id;
}e[maxn], p[maxn], q[maxn], a[maxn], b[maxn];
//e用来存储三维坐标,p用来存储第三维相等时的二维坐标,q用来存储第二三维都相等的一维坐标
//a用来存储二维操作中剩余点的坐标,b则是用来存储三位操作中剩余点的坐标
int n, c2D, c3D;
il bool cmp(node a, node b) { return a.z < b.z; }
il bool cmp1(node a, node b) { return a.y < b.y; }
il bool cmp2(node a, node b) {return a.x < b.x; }
il void solve1D(int x) {
sort(q + 1, q + x + 1, cmp2);
for(re int i = 1; i < x; i += 2) printf("%d %d\n", q[i].id, q[i + 1].id);
if(x & 1) a[++ c2D] = q[x];
}
il void solve2D(int x) {
sort(p + 1, p + x + 1, cmp1);
int now = 1, cnt = 0; c2D = 0;
rep(i, 1, x) {
now = i;
while(now <= x && p[i].y == p[now].y) q[++ cnt] = p[now ++];
i = now - 1, solve1D(cnt), cnt = 0;
}
for(re int i = 1; i < c2D; i += 2) printf("%d %d\n", a[i].id, a[i + 1].id);
if(c2D & 1) b[++ c3D] = a[c2D];
}
il void solve3D() {
sort(e + 1, e + n + 1, cmp);
int now = 1, cnt = 0;
rep(i, 1, n) {
now = i;
while(now <= n && e[i].z == e[now].z) p[++ cnt] = e[now ++];
i = now - 1, solve2D(cnt), cnt = 0;
}
for(re int i = 1; i < c3D; i += 2) printf("%d %d\n", b[i].id, b[i + 1].id);
}
int main() {
n = read();
rep(i, 1, n) e[i].id = i, e[i].x = read(), e[i].y = read(), e[i].z = read();
solve3D();
return 0;
}
CF1237C2 【Balanced Removals (Harder)】的更多相关文章
- C2. Balanced Removals (Harder) (幾何、思維)
Codeforce 1237C2 Balanced Removals (Harder) (幾何.思維) 今天我們來看看CF1237C2 題目連結 題目 給你偶數個三維座標點,每次選其中兩點,如果兩點為 ...
- 【Balanced Binary Tree】cpp
题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...
- 【遍历二叉树】10判断二叉树是否平衡【Balanced Binary Tree】
平衡的二叉树的定义都是递归的定义,所以,用递归来解决问题,还是挺容易的额. 本质上是递归的遍历二叉树. ++++++++++++++++++++++++++++++++++++++++++++++++ ...
- Codeforces 1237C2. Balanced Removals (Harder)
传送门 先来考虑一下二维时的情况,那么对于 $x$ 相同的点,我们按 $y$ 排序,然后相邻的一对对消除 最后 $x$ 坐标相同的点最多剩下一个,那么此时所有点的 $x$ 坐标都不一样 再按 $x$ ...
- 【C#数据结构系列】查找
一:查找 1.1 基本概念和术语 查找(Search)是在数据结构中确定是否存在关键码等于给定关键码的记录的过程.关键码有主关键码和次关键码.主关键码能够唯一区分各个不同的记录,次关键码通常不能唯一区 ...
- 【无旋 treap】例题
[bzoj3223]文艺平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[ ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【夯实PHP基础】PHP数组,字符串,对象等基础面面观
本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...
- 【Java学习系列】第3课--Java 高级教程
本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...
随机推荐
- Hive学习笔记(一)——概述
1.Hive是个什么玩意? Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据(有规律的数据)文件映射为一张表,并提供 ...
- nginx+lua访问流量实时上报kafka
在nginx这一层,接收到访问请求的时候,就把请求的流量上报发送给kafka storm才能去消费kafka中的实时的访问日志,然后去进行缓存热数据的统计 从lua脚本直接创建一个kafka prod ...
- .Net Core WebApi(3)—NLog
在.Net Core中,微软提供的内置的日志组件没有实现将日志记录到文件.数据库上.这里使用NLog替代内置的日志组件 1.在项目中引入NuGet包 NLog NLog.Web.A ...
- sense chrome扩展工具安装问题
下载一个chrome的插件,只能在国内下了.有个什么插件网 .下载完之后是 .crx 格式的.直接拖到 chrome的扩展工具里,显示,插件有问题.无语 参考了一个网上的教程. 1.先将扩展名 .c ...
- iOS - FlexBox 布局之 YogaKit
由于刚开始的项目主要用的H5.javaScript技术为主原生开发为辅的手段开发的项目,UI主要是还是H5,如今翻原生.为了方便同时维护两端.才找到这个很不错的库. FlexBox?听起来像是一门H5 ...
- 【转载】C#中Convert.ToDecimal方法将字符串转换为decimal类型
在C#编程过程中,可以使用Convert.ToDecimal方法将字符串或者其他可转换为数字的对象变量转换为十进制decimal类型,Convert.ToDecimal方法有多个重载方法,最常使用的一 ...
- 深入理解es6(上)
一.let和const 1.let与var的区别 不存在变量提升 块级作用域 不允许重复声明 2.const常量 const与let一样,唯一区别在于声明的常量不能被修改 二.解构赋值 es6按照一定 ...
- region、xld有对应的字符串时,将region、xld按照行或列排序的算法实现
用Halcon解码时,如果一张图里面有多个码,它通常可以把这些码都解出来,并且生成对应的解码结果字符串元组(也就是下面的DecodedDataStrings),如果有多个码,那么该元组就有多个元素. ...
- Java基础 StringBuffer、StringBuilder原理浅析
StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 首先看下面的例子 public sta ...
- Java 数组实例——实现棋盘落子
五子棋.连连看.俄罗斯方块.扫雷等常见小游戏,都可以通过二维数组实现. 棋盘落子效果图: 源码: package my_package; import java.io.BufferedReader; ...