Educational Codeforces Round 134 (Div.2) D 题解

这篇具有很好参考价值的文章主要介绍了Educational Codeforces Round 134 (Div.2) D 题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接

D. Maximum AND

题目大意

给定两组序列 \(a\) \(b\),长度为 \(n\) ,现有一新序列 \(c\),长度也为 \(n\)
其中,\(c_i = a_i \oplus b_i\)
定义 \(f(a,b) = c_1\&c_2\&……\&c_n\)
现在你可以随意编排 \(b\) 序列的顺序,求 \(f(a,b)\) 的最大值。

思路

以下位运算均是二进制。

由于按位与的运算结果是越来越小的,考虑从高位往低位贪心。
将结果的其中一位定为1之后,有一些序列 \(b\) 中的元素的位置就被定下来了。
所以我们要从高位往低位贪心,有一位可以置为1,就把它置为1.

具体做法:暴力枚举,时间复杂度\(O(nlognlogA)\),其中 \(A\) 是输入序列的最大值。文章来源地址https://www.toymoban.com/news/detail-739577.html

void solve() {

	cin >> n;

	a = vector<int> (n);
	b = vector<int> (n);

	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}

	for (int i = 0; i < n; ++i) {
		cin >> b[i];
	}
	
	auto check = [&](int ans){
		//ans是一个2的整次幂
		map<int,int> cnt;
		//下面两个for是 判断该位上、a序列的1和b序列的0的个数是否相等。
		for(auto x:a) cnt[x & ans] += 1;
		for(auto x:b) cnt[~x & ans] -= 1;
		bool ok = true;
		//如果有1,证明不等,ok置为false
		for(auto [u,v] : cnt){
			ok &= v == 0;
		}
		return ok;
	};
	
	int ans = 0;
	for(int j = 30; j >= 0; --j){
		//从高位向低位检查。
		//写博客的时候的思考:如何把之前的已经确定了的1保存下来
		//答:其实就保存在ans中。
		if(check(ans | (1ll << j))){
			ans |= 1 << j;
		}
	}

	cout << ans << '\n';
}

到了这里,关于Educational Codeforces Round 134 (Div.2) D 题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Educational Codeforces Round 161 (Rated for Div. 2)

    Educational Codeforces Round 161 (Rated for Div. 2) 题意:开始没看懂。。。给出长度均为n的三个字符串abc,字符串s与模板t匹配的条件为:当模板位置字符为小写时, s i s_i s i ​ 与 t i t_i t i ​ 必须相同,大写时二者必须不同。这里注意,字符匹配过程是不区分大小写的,’C‘与’

    2024年01月19日
    浏览(26)
  • Educational Codeforces Round 139 (Rated for Div. 2)

    Educational Codeforces Round 139 (Rated for Div. 2) Problem - 1766E - Codeforces 显然我们可以把0序列的贡献单独算: i*(n-i+1)  考虑只存在1,2,3的情况. 首先通过,观察到一个重要性质: 最多只有三种序列 . 含有3或纯1或纯2型. 纯1或纯2型 纯2或纯1型 我们每次添加元素的操作, 只跟上一个位置序列

    2024年02月06日
    浏览(27)
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—C)

    从1到9,每个数后面都可以加一个数构成一个含有两个数的质数,只需要从s[1]~s[9]中找到一个数与s[0]构成质数即可 观察样例即可发现两个字符串只要在相同位置都有 01 存在就能成功实现转换后两个字符串相等 可以先假设字符串是可以成立的,那么接下来就判断它什么时间是

    2024年02月10日
    浏览(26)
  • Educational Codeforces Round 154 (Rated for Div. 2)(A—D)

    从1到9,每个数后面都可以加一个数构成一个含有两个数的质数,只需要从s[1]~s[9]中找到一个数与s[0]构成质数即可 观察样例即可发现两个字符串只要在相同位置都有 01 存在就能成功实现转换后两个字符串相等 可以先假设字符串是可以成立的,那么接下来就判断它什么时间是

    2024年02月10日
    浏览(25)
  • Educational Codeforces Round 62 (Rated for Div. 2) C. Playlist

     一开始肯定要排个序,b相同时t大的在前边,不同时b大的在前面。 然后想最多只能选k个的限制,可以这样想,每次用到的b只能用已选到的最小的值,那可以把每个b都枚举一遍,然后每一次选时长最长的,且b大于等于当前的b的那k个不就好了吗,时间复杂度也才O(n),然

    2024年02月12日
    浏览(28)
  • Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)

    C. Digital Logarithm 给两个长度位 n n n 的数组 a a a 、 b b b ,一个操作 f f f 定义操作 f f f 为, a [ i ] = f ( a [ i ] ) = a [ i ] a[i]=f(a[i])=a[i] a [ i ] = f ( a [ i ]) = a [ i ] 的位数 求最少多少次操作可以使 a 、 b a、b a 、 b 两个数组变得完全相同 性质: 对于任何数,经过两次操作我们一定可以

    2024年02月20日
    浏览(27)
  • 【每日一题】—— B. Ternary String (Educational Codeforces Round 87 (Rated for Div. 2))

    🌏博客主页: PH_modest的博客主页 🚩当前专栏: 每日一题 💌其他专栏: 🔴 每日反刍 🟡 C++跬步积累 🟢 C语言跬步积累 🌈座右铭: 广积粮,缓称王! 题目大意:给你一串由1、2、3组成的数组,让你求一个最短的子串,要求这个子串包含1、2、3 题目链接:B. Ternary String

    2024年02月16日
    浏览(26)
  • Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+组合数学)

    题目 称一个长为n的数列a是fancy的,当且仅当: 1. 数组内至少有一个元素在[x,x+k-1]之间 2. 相邻项的差的绝对值不超过k,即 t(t=50)组样例,每次给定n(1=n=1e9),x(1=x=40), 求fancy的数组的数量,答案对1e9+7取模 思路来源 灵茶山艾府群 官方题解 题解 看到 至少 的字眼,首先想到容斥,

    2024年02月05日
    浏览(27)
  • Codeforces Round 875 (Div. 1) 题解

    You are given two arrays a and b both of length n. Your task is to count the number of pairs of integers ( i , j ) (i,j) ( i , j ) such that 1 ≤ i j ≤ n 1≤ij≤n 1 ≤ i j ≤ n and a i ⋅ a j = b i + b j a_i⋅a_j=b_i+b_j a i ​ ⋅ a j ​ = b i ​ + b j ​ 。 1 ≤ a i , b i ≤ n 1≤a_i,b_i≤n 1 ≤ a i ​ , b i ​ ≤ n 考虑 m i n ( a i

    2024年02月08日
    浏览(25)
  • Codeforces Round 830 (Div. 2)题解

    1A 这个设计到一个常识,如果知道能在三分钟之内解题: 相邻的两个数字的gcd肯定是1::这个没有问题,比如gcd(1,2),比如gcd(3,4) 但是我想要任何两个数字的的最大公约数为1,我们直接让这两个数字等于除以相邻的两个数字的结果就行, 结果必然是两个树的因子,两个相邻的

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包