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. powershell中使用Send-MailMessage发送邮件

    在powershell中我们可以使用Send-MailMessage发送邮件,一般都是有这个命令的 笔者的总结是鉴于公司的环境的,大家在借鉴时,需要根据自己的实际情况进行修改 1.你笔者测试的格式如下 ...

  2. Java高级开发必会的50个性能优化的细节(珍藏版)

      在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短 ...

  3. 趣图:大佬如何解决bug的

    Bug 变 Feature, 这招简直太帅了!   扩展阅读 趣图:我说自己菜 vs 大佬说自己菜 趣图:公司实习生找 Bug 趣图:国内一些大平台的推荐算法 趣图:开发和测试是如何对待代码的 趣图: ...

  4. Spring Boot 项目打成 war 包部署

    Spring Boot 一个非常方便的功能就是支持内置的 Servlet 容器,一般我们部署 Spring Boot 应用时都是打成一个可执行的 Jar 包进行部署.其实 Spring Boot 也是 ...

  5. spring初始(介绍、核心架构)

    1.spring介绍 Spring是个java企业级应用的开源开发框架.主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring框架目标是简化Java企业级应用开发,并通 ...

  6. modelviewset settings 配置

    # 过滤器 # 1,安装 django-filter # 2,注册应用 # 3,配置settings, 在view里配置可过滤的字段 # 4,使用 查询字符串携带过滤信息 REST_FRAMEWORK ...

  7. Python-TypeError: not all arguments converted during string formatting

    Where? 运行Python程序,报错出现在这一行 return "Unknow Object of %s" % value Why? %s 表示把 value变量装换为字符串, ...

  8. 怎样优雅的实现INotifyPropertyChanged

    第一 安装nuget包 PropertyChanged.Fody. 第二 在类的上方加上 [PropertyChanged.AddINotifyPropertyChangedInterface] 类似 ...

  9. 一、Mysql(1)

    数据库简介 人类在进化的过程中,创造了数字.文字.符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题 计算机诞生后,数据开始在计算 ...

  10. chattr 和 lsattr 命令详解

    lsattr 命令 lsattr 命令用于查看文件的第二扩展文件系统属性. 语法: lsattr(选项)(参数) 选项: -E:可显示设备属性的当前值,但这个当前值是从用户设备数据库中获得的,而不是从 ...