D. Generating Sets 解析(思維)
Codeforce 722 D. Generating Sets 解析(思維)
今天我們來看看CF722D
題目連結
題目
略,請直接看原題
前言
真的是沒想到...

想法
觀察到,\(x\times2,x\times2+1\)這兩個運算反過來看就是把任一個數字除以\(2\)(因為整數型別會自動捨去小數點,所以整數型別的\(\frac{x}{2}=\lfloor\frac{x}{2}\rfloor\)),那麼我們可以嘗試從原數列\(y\)找到\(generating\ set\)。
每次尋找目前\(y\)數列中最大的數字\(y[i]\),並且嘗試除以\(2\),直到數字不再\(>0\)(題目要求要是positive integer),找到一個目前沒有出現在數列中的數字就先把\(y[i]\)設定成那個數字。
不斷重複,直到最大的數字沒有辦法再被減小。
之所以可以這麼做是因為,首先我們當然想要把最大的數字減小,而可行的數字就是不斷除以\(2\)的那些數字。而選擇不斷除\(2\)下來最大的可行的數字是因為這是最保守的把\(maximum\)降下來的方法。
實作方面可以利用\(std::set\)的\(iterator\)是有序排列的特性,或者可以用\(priority\_queue\)來取出目前數列中最大的數字。
程式碼:
const int _n=5e4+10;
int t,n,y[_n];
VI ans;
set<int> vis;
set<int,greater<int>> mx;
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;rep(i,0,n){cin>>y[i];mx.insert(y[i]);vis.insert(y[i]);}
while(1){
bool bk=1;
int now=(*mx.begin());
while((now=now/2)>0){
if(!vis.count(now)){
mx.erase(mx.begin());mx.insert(now),bk=0,vis.insert(now);break;
}
}
if(bk)break;
}for(auto it=mx.begin();it!=mx.end();it++)cout<<*it<<' '; cout<<'\n';
return 0;
}
標頭、模板請點Submission看
Submission
D. Generating Sets 解析(思維)的更多相关文章
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
- B. Two Arrays 解析(思維)
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
- C. k-Amazing Numbers 解析(思維)
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
随机推荐
- AOP参数校验
1.切面依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- BTRsys1~2系列靶机渗透
BTRsys系列靶机渗透 BTRsys1 端口发现加目录扫描. 发现目录:http://192.168.114.161/login.php 尝试弱密码失败,查看源代码. <script type ...
- 详细分析 Java 中启动线程的正确和错误方式
目录 启动线程的正确和错误方式 前文回顾 start 方法和 run 方法的比较 start 方法分析 start 方法的含义以及注意事项 start 方法源码分析 源码 源码中的流程 run 方法分 ...
- Python-列表 元组-list tuple
列表 list [vale,...] 可加入任意类型数据,并可嵌套,不定长 student = ["beimenchuixue", "maYun", " ...
- 18-SE-你说的都队
文章目录 前言 建设银行app分析 招商银行app分析 中国银行app分析 工商银行app分析 总结 团队成员分工与评分 前言 18-SE-你说的都队所选项目题目为"村镇银行储蓄业务系统开发 ...
- 【小白学PyTorch】17 TFrec文件的创建与读取
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...
- 灵感来袭,基于Redis的分布式延迟队列(续)
背景 上一篇(灵感来袭,基于Redis的分布式延迟队列)讲述了基于Java DelayQueue和Redis实现了分布式延迟队列,这种方案实现比较简单,应用于延迟小,消息量不大的场景是没问题的,毕竟J ...
- 071 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 03 综合案例-数组移位-显示数组当中所有元素的的方法
071 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 03 综合案例-数组移位-显示数组当中所有元素的的方法 本文知识点:综合案例-数组移位-显示数组当中所有元素 ...
- C++ 中explicit的作用
转载:https://www.cnblogs.com/diligenceday/p/5781408.html C++ 中explicit的作用 explicit作用: 在C++中,explicit ...
- Linux基础入门 vim常用命令详解
介绍 vim是一个文本编辑程序 没有菜单,只有命令,且命令繁多 命令行模式下相关命令 移动光标 h: ← 左移 l: → 右移 j: ↓ 下移 k: ↑ 上移 gg: 光标移动文件 ...