专栏文章
题解:CF722D Generating Sets
CF722D题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqwl5ns
- 此快照首次捕获于
- 2025/12/04 11:55 3 个月前
- 此快照最后确认于
- 2025/12/04 11:55 3 个月前
非常简单的贪心题目。
每一次找出最大的数,然后一直 ,直到集合中不存在 ,然后把 插入到集合中。
当这样操作到 时都无法插入,直接结束程序。
集合可以用 set 维护,时间复杂度:,可以通过本题。
CPP#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pii pair<int,int>
#define endl '\n'
#define pb push_back
#define ls(p) ((p)<<1)
#define rs(p) ((p)<<1|1)
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N=50005;
int a[N];
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;
cin>>n;
set<int> s;
for (int i=1;i<=n;i++){
cin>>a[i];
s.insert(a[i]);
}
while ("ljd loves xyq forever"){
int x=(*(--s.end()));
int num=x;
while (x){
if (!s.count(x)){
s.erase(num);
s.insert(x);
break;
}
x>>=1;
}
if (x==0){
s.insert(num);
break;
}
}
for (int x:s) cout<<x<<' ';
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...