Codeforce 1237C2 Balanced Removals (Harder) (幾何、思維)

今天我們來看看CF1237C2

題目連結

題目

給你偶數個三維座標點,每次選其中兩點,如果兩點為對角的盒子(可以退化成2,1維)中不包含其他未移除的點,那麼就可以把這兩點移除。要輸出一個合法的移除順序

想法

如果現在只有一維,那麼問題就簡單了,把座標排序一下,兩個兩個移除就好。

所以我們如果能夠把問題化約到一維上就解決了。

觀察到,如果現在有n個(不保證偶數)一維的點,那麼刪除到最後會最多剩下一個點。利用這點,首先我們把同樣z座標的點分堆收集起來(圖形上來看:把在同樣x-y平面的點收集起來),然後接著遞迴地處理:

對於每個x-y平面,把同樣y座標的點收集起來(圖形上來看:把在同樣x軸直線的點收集起來)...。

而每個降一個維度的點集處理完以後,有可能會有剩餘一個點無法處理,把這些點收集起來就會是一個一維的點集,就可以直接兩個兩個輸出了。

程式碼:

const int _n=5e4+10;
int t,n;
vector<VI> p(_n,VI(3));
int solve(VI& ids,int d){
if(d==0)return ids[0];
map<int,VI> mp;
rep(i,0,SZ(ids))mp[p[ids[i]][d-1]].pb(ids[i]);
VI left;
for(auto& x:mp){
int res=solve(x.se,d-1);
if(res!=-1)left.pb(res);
}
for(int i=0;i+1<SZ(left);i+=2){cout<<left[i]+1<<' '<<left[i+1]+1<<'\n';}
if(SZ(left)%2==1)return left.back();
return -1;
}
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>n;rep(i,0,n)rep(j,0,3)cin>>p[i][j];
VI init;rep(i,0,n)init.pb(i);
solve(init,3);
return 0;
}

標頭、模板請點Submission看

Submission

C2. Balanced Removals (Harder) (幾何、思維)的更多相关文章

  1. C2. Power Transmission (Hard Edition) 解析(思維、幾何)

    Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...

  2. C2. Pokémon Army (hard version) 解析(思維)

    Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...

  3. CF1237C2 【Balanced Removals (Harder)】

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

  4. Codeforces 1237C2. Balanced Removals (Harder)

    传送门 先来考虑一下二维时的情况,那么对于 $x$ 相同的点,我们按 $y$ 排序,然后相邻的一对对消除 最后 $x$ 坐标相同的点最多剩下一个,那么此时所有点的 $x$ 坐标都不一样 再按 $x$ ...

  5. A. Peter and Snow Blower 解析(思維、幾何)

    Codeforce 613 A. Peter and Snow Blower 解析(思維.幾何) 今天我們來看看CF613A 題目連結 題目 給你一個點\(P\)和\(n\)個點形成的多邊形(照順或逆 ...

  6. 邁向IT專家成功之路的三十則鐵律 鐵律十:IT人思維之道-跳脫框架

    莊子的哲學思想歸本於老子,他認為人要解脫束縛必須做到不從任何的角度與任何的時間來看待事物,而是必須與天地同體,然而也唯有如此才能看清宇宙間萬事萬理的真諦.無論是莊子還是老子,他們畢竟是中國古代的聖賢, ...

  7. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

  8. C. Bank Hacking 解析(思維)

    Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...

  9. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

随机推荐

  1. Combine 框架,从0到1 —— 5.Combine 提供的发布者(Publishers)

    本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 5.Combine 提供的发布者(Publishers). 内容概览 前言 Just Future D ...

  2. Tomcat 中 catalina.out、catalina.log、localhost.log 和 access_log 的区别

    打开 Tomcat 安装目录中的 log 文件夹,我们可以看到很多日志文件,这篇文章就来介绍下这些日记文件的具体区别. catalina.out 日志 catalina.out 日志文件是 Tomca ...

  3. 每日一个知识点:Volatile 和 CAS 的弊端之总线风暴

    每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解,此处不涉及详细的原理性解读. 一.什么是总线风暴 总线风暴,听着真是一个帅气的词语,但如果发生在你的系统上那 ...

  4. Hibernate4.3基础知识2

    一.数据库的隔离级别   脏读 不可重复读 幻读 Read uncommited Y Y Y Read commited N Y Y Repeatable read N N Y Serializabl ...

  5. Java安全之URLDNS链

    Java安全之URLDNS链 0x00 前言 在学习Java的反序列化漏洞的时候,就不得不学习他的一个利用链.很多刚刚入门的对于利用链这个词可能比较陌生.那么这里先来了解一下Java反序列化和反序列化 ...

  6. arduino中SCoop库的简单应用案例

    转载:https://www.csdn.net/gather_27/MtTaggzsMDExMS1ibG9n.html arduino中SCoop库的简单应用案例首先这篇文章来在视频https://v ...

  7. Java (二)基于Eclipse配置Commons IO的环境

    上一篇:Java (一)下载APACHE Commons IO 一.新建一个Java Project 二.使用鼠标右键点击工程,选择New > Folder 三.在Folder name输入文件 ...

  8. Object.assign()的使用

    一.Object.assign()对象的拷贝 1 Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 2 Object.assign(ta ...

  9. 学习Jmeter,这一篇就够了

    Jmeter在软件测试中的常用功能,看完你应该就会了 1.Jmeter的下载安装 1.1  Jmeter的官方网址是:http://jmeter.apache.org/:下载最新的包到本地进行解压,路 ...

  10. 安装haproxy

    安装依赖 yum install -y gcc pcre pcre-devel openssl openssl-devel 创建依赖账号,并禁止账号登录 useradd -M -s /sbin/nol ...