首页 > 其他分享 >Codeforces Round 944 (Div. 4) G(思维 + 位运算性质)

Codeforces Round 944 (Div. 4) G(思维 + 位运算性质)

时间:2024-09-11 20:27:04浏览次数:11  
标签:le int 944 Codeforces while ch Div oplus

题意

给定一个由 \(n\) 个非负整数组成的数组 \(a\)。
如果 \(a_i \oplus a_j < 4\),那么你就可以交换 \(a_i、a_j\),其中,\(\oplus\) 是按位异或。
求出操作若干次后,字典序最小的序列。

数据范围:\(1 \le n \le 2 \times 10^5\),\(0 \le a_i \le 10^9\)。

题解

性质:$ a_i \oplus a_j < 4 $ 的充分必要条件是:如果不考虑 \(a_i、a_j\) 二进制下的最低两位,那么\(a_i、a_j\) 相等。

我们可以将 \(a_1 \sim a_n\) 划分为若干个集合,每个集合内部实现升序排序,然后放回对应的位置。由于值域很大,因此这个操作可以用 std::map 实现。

时间复杂度为 \(\mathcal{O}(nlogn)\)。


点击查看代码
#include <bits/stdc++.h>

using i64 = int64_t;

inline int read() {
	bool sym = false; int res = 0; char ch = getchar();
	while (ch < '0' or ch > '9') sym |= (ch == '-'), ch = getchar();
	while (ch >= '0' and ch <= '9') res = (res << 3) + (res << 1) + (ch ^ 48), ch = getchar();
	return sym ? -res : res;
}

void solve() {
	int n = read();
	std::vector<int> a(n + 1);
	for (int i = 1; i <= n; i++) {
		a[i] = read();
	}
	
	std::map<int, std::priority_queue<int>> f;
	for (int i = 1; i <= n; i++) {
		f[a[i] ^ (a[i] & 3)].push(-a[i]);
	}
	for (int i = 1; i <= n; i++) {
		printf("%d%s", -f[a[i] ^ (a[i] & 3)].top(), i == n ? "\n" : " ");
		f[a[i] ^ (a[i] & 3)].pop();
	}
}

int main() {
	int T = read();
	while (T--) {
		solve();
	}
	return 0;
}

标签:le,int,944,Codeforces,while,ch,Div,oplus
From: https://www.cnblogs.com/LDUyanhy/p/18408900

相关文章

  • Codeforces Round 933 (Div. 3) (C-G)
    这场比赛由于急躁心态不稳导致abc三题接连wa,这时候心态几乎爆炸。而d题思路其实很清晰,但是因为set使用不熟练卡住。最后没用set十分钟就写完过了。这时候只剩下十多分钟来不及写别的了。结束收获主要就是:还是要注意边界的细节(ab题就不放了。。C-RudolfandtheUglyString......
  • CF div2 round 960
    C.MadMADSum手玩规律题,预处理两次就能得到一个规律的答案。#include<bits/stdc++.h>usingnamespacestd;#definels(x)(x<<1)#definers(x)((x<<1)+1)intread(){ intret=0;charc=getchar(); while(c<'0'||c>'9')c=getc......
  • YOLOv8改进系列,YOLOv8添加DiverseBranchBlock(多样分支块),并在C2f结构引入
    原论文摘要一种卷积神经网络(ConvNet)的通用构建模块,以在不增加推理时间成本的情况下提高性能。该模块被命名为多样分支块(DiverseBranchBlock,DBB),通过结合不同尺度和复杂度的多样分支来丰富特征空间,包括卷积序列、多尺度卷积和平均池化,从而增强单个卷积的表示能力。在训练......
  • Divide and Conquer:ZK除法中隐藏的漏洞
    ZK的崛起与演变曾几何时,零知识证明(以下简称ZK)仍然被认为是密码学教科书中的理论概念,至少在传统安全研究中很少被主流社群深入探索。然而在Web3.0领域,区块链技术的迅速发展,用短短几年时间实现了ZK从理论到实践的跨越式进展,一路蓬勃,高歌猛进。1985年诞生,2014年ZCash才用SNAR......
  • P6944
    概率期望谔谔谔。#include<bits/stdc++.h>usingnamespacestd;doublef[1010][1010];doubleg[1010][1010];doubleC[1010][1010];intmain(){ intn=ri,d=ri,r=ri; C[0][0]=1; for(inti=1;i<=n;i++){ C[i][0]=1; for(intj=1;j<=......
  • Codeforces Round 942 (Div. 1) VP 记录
    CodeforcesRound942(Div.1)VP记录我没实力打Div1/kk事实上我唯一rated的那场Div1切三题是不是运气好啊/kk/kkA考虑\(k=0\)的时候怎么做。设最小值为\(x\),答案显然是\(\sum[a_i=x\veea_i=x+1]a_i\)。都与最小值相关了,都最小值最大了,直接二分答......
  • CodeForces Round #621 ABC (1307A+1307B+1307C) 题解
    A.CowandHaybales题面TheUSAConstructionOperation(USACO)recentlyorderedFarmerJohntoarrangearowofnhaybalepilesonthefarm.The\(i\)-thpilecontains\(a_i\)haybales.However,FarmerJohnhasjustleftforvacation,leavingBessieal......
  • Codeforces Round 970 (Div. 3)
    A.Sakurako'sExam分类讨论即可,当a为奇数,无法消去1,或者a==0且b为奇数时,无法消去2#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;voidsolve(){ inta,b; intflag=1; cin>>a>>b; if(a&1)flag=0;......
  • 计算机毕业设计必看必学!! 09446 Springboot基于小程序的校园招聘系统的设计与实现,原
    摘 要随着智能手机的普及和4G网络的发展,以O20为代表的互联网+服务模式从衣食住行等方方面面改变着我们的生活方式。基于小程序的校园招聘系统主要功能模块包括用户管理,招聘资讯、招聘职位、简历投递、面试邀请等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的......
  • Codeforces Round 941 (Div. 1) VP记录
    CodeforcesRound941(Div.1)VP记录我了个掉分场啊。没场切C导致看起来会-50。A排序后差分。它毕竟还是个公平组合游戏,所以如果Alice在一次操作中能够控制能把后手扔给自己还是对面就赢了。然后我们发现如果一个差分值\(x\ge2\)就是必胜的吧。先手可以自己取完......