首页 > 其他分享 >CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!) B. Friendly Arrays

CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!) B. Friendly Arrays

时间:2025-01-11 20:11:13浏览次数:1  
标签:Rated XOR Arrays ldots leq int test Div oplus

Codeforces 题解 - [B. Friendly Arrays]

题目链接

题目描述

You are given two arrays of integers — \(a_1, \ldots, a_n\) of length \(n\), and \(b_1, \ldots, b_m\) of length \(m\). You can choose any element \(b_j\) from array \(b\) (\(1 \leq j \leq m\)), and for all \(1 \leq i \leq n\) perform \(a_i = a_i | b_j\). You can perform any number of such operations.

After all the operations, the value of \(x = a_1 \oplus a_2 \oplus \ldots \oplus a_n\) will be calculated. Find the minimum and maximum values of \(x\) that could be obtained after performing any set of operations.

Above, \(|\) is the bitwise OR operation, and \(\oplus\) is the bitwise XOR operation.。

输入格式

The first line contains a single integer \(t\) (\(1 \leq t \leq 10^4\)) — the number of test cases. This is followed by the description of the test cases.

The first line of each test case contains two integers \(n\) and \(m\) (\(1 \leq n, m \leq 2 \cdot 10^5\)) — the sizes of arrays \(a\) and \(b\).

The second line of each test case contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — the array \(a\).

The third line of each test case contains \(m\) integers \(b_1, b_2, \ldots, b_m\) (\(0 \leq b_i \leq 10^9\)) — the array \(b\).

It is guaranteed that the sum of values of \(n\) and \(m\) across all test cases does not exceed \(2 \cdot 10^5\).

输出格式

For each test case, output \(2\) numbers: the minimum and maximum possible values of \(x\) after performing any set of operations.

题目大意

对于每个测试用例,有一个数组a,和一个数组b。
对于每个 \(a_{i}\), 可以选择 \(b_{j}\) 对所有的\(1 \leq i \leq n\)进行 \(a_{i} = a_{i} | b_{j}\) 的操作,进行任意次。 求出 \(x = a_{1} \oplus a_{2} \oplus \ldots \oplus a_{n}\) 的最小值和最大值。

输入

2
2 3
0 1
1 2 3
3 1
1 1 2
1

输出

0 1
2 3

解题思路

  • 对于每个\(b_{j}\)进行操作以后, \(b_{j}\)的二进制位上为1的位,在a数组中所有的对应的位都会变成1。(并且会保持这种状态,因为在OR中的运算,位不会由1变成0)。
  • 由以上的操作,仍是对于每个\(b_{j}\),我们仍对对应的这些为1的位考虑, 如果\(n\)为奇数,那么a的最终的XOR的结果会将此位变成1(因为有奇数个1进行异或)。同理如果\(n\)是偶数最终的XOR的结果会将此位变成0。
  • 因此可以得出结果,如果是奇数,最大值就是对所有的\(b_{j}\)都进行一次操作的a的XOR的结果,最小值就是不进行操作的直接a的XOR的结果。如果是偶数,最大值就是不进行操作的直接a的XOR的结果,最小值就是对所有的\(b_{j}\)都进行一次操作后的a的XOR的结果。
  • 可以看到如果直接对每个\(b_{j}\)进行操作时间复杂度是\(O(nm)\),会超时。但是由于第一个要点,我们可以先对b数组进行预处理,将b数组中所有的数进行OR运算,得到一个数,然后再对这个数进行操作。时间复杂度为\(O(n+m)\)。

代码实现

#include "bits/stdc++.h"
using namespace std;
// #define int int64_t
constexpr int INF = 1e9 + 10;

void Solution()
{
	int n, m;
	cin >> n >> m;
	vector<int> a(n + 1), b(n + 1);
	int c = 0;
	for(int i = 1;i <= n;++i)
	{
		cin >> a[i];
	}
	for(int i = 1;i <= m;++i)//预处理所有的b数组的OR运算
	{
		int aa; cin >> aa;
		c |= aa;
	}
	int Ans = 0, ansOnly = 0;
	if(n & 1)//a数组个数为奇数
	{
		for(int i = 1;i <= n;++i)
		{
			ansOnly ^= a[i];
			Ans ^= a[i] | c;
		}
		cout << ansOnly << ' ' << Ans << '\n';
	}
	else//为偶数
	{
		for(int i = 1;i <= n;++i)
		{
			ansOnly ^= a[i];
			Ans ^= a[i] | c;
		}
		cout << Ans << ' ' << ansOnly << '\n';
	}

	return;
}

signed main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	int t; cin >> t;
	while (t--)
	{
		Solution();
	}
	return 0;
}
/*
1
3 3 2
3 4 5
1 2 3
*/

标签:Rated,XOR,Arrays,ldots,leq,int,test,Div,oplus
From: https://www.cnblogs.com/matinalcosmos/p/18666157

相关文章

  • 【区间合并+贡献法】codeforces 1789 C. Serval and Toxel's Arrays
    题目https://codeforces.com/problemset/problem/1789/C题意第一行输入一个正整数\(T(1\leqT\leq10^4)\),代表\(T\)组测试用例。对于每组测试用例:第一行输入两个正整数\(n,m(1\leqn,m\leq2\times10^5)\),分别代表要输入的数组长度和修改次数。第二行输入一个长......
  • VP Codeforces Round 995 (Div. 3)
    A.PreparingfortheOlympiad题意,有两个数组a和b,如果你选了a数组中第i个,那么对手获得b数组第i+1个,求你们得分的差值最大。直接加上所有ai>bi+1的就行。点击查看代码voidsolve(){intn;std::cin>>n;std::vector<int>a(n),b(n);for(inti=0;......
  • CF div2 994 (A~E)
    VP赛时三题,自我感觉发挥不错,唯一不满意的地方在于D题完全没有思路。A答案最多为2,因为最坏情况即为先将整个区间合并为一个数,若这个数不是0,则再将这个数变为0。所以3种情况分类讨论即可:全是0,则不需要操作->\(0\)只有一段非\(0\)连续区间->\(1\)不止\(1\)个非\(0\)连续区......
  • VP Codeforces Round 994 (Div. 2)
    A.MEXDestruction题意:给你一个数组,每次操作选择一个区间使这个区间变为区间mex,问最少操作使得数组全为0.容易发现,对任意一个区间,最多两次操作这个区间就会全变成0,于是我们想尽可能操作大的区间。但并不是直接操作整个数组一定更好,如果我们选择的区间里没有0,那么只需要一次操......
  • Codeforces Round 986 (Div. 2) CF2028 代码集
    CodeforcesRound986(Div.2)CF2028代码集目录CodeforcesRound986(Div.2)CF2028代码集CF2028A-Alice'sAdventuresin''Chess''CF2028B-Alice'sAdventuresinPermutingCF2028C-Alice'sAdventuresinCuttingCakeCF2024D-A......
  • SpringBoot项目启动报错java.lang.ArrayStoreException: sun.reflect.annotation.Type
    问题今天启动业余学习项目里的某服务A发现启动失败,报错信息如下:[ERROR][2025-01-0515:41:26,083][main]com.cdfive.springboot.startup.ApplicationStartupExceptionReporter[30]-error=>java.lang.ArrayStoreException:sun.reflect.annotation.TypeNotPresentExcepti......
  • CF补题 950-Div.3
    CF补题950-Div.3-20250102Dashboard-CodeforcesRound950(Div.3)-CodeforcesA:题目大意:给出一个字符串,要求重复的字母必须\(\gem\),求缺失字母总个数#include<iostream>#include<map>usingnamespacestd;map<char,int>mp;intmain(){ intT; cin>&g......
  • CopyOnWriteArraySet与CopyOnWriteArrayList
    这两个集合都支持写复制,在并发性方面比,ArrayList,LinkList要好一些。适用场景:读多邪少的情况看下源码为甚么读多写少的情况下比较好第一步:CopyOnWriteArraySetcopyOnWriteArraySet=newCopyOnWriteArraySet<>();copyOnWriteArraySet......
  • 【深度学习基础|知识概述】基础数学和理论知识中的信息论知识:交叉熵(Cross-Entropy)和KL
    【深度学习基础|知识概述】基础数学和理论知识中的信息论知识:交叉熵(Cross-Entropy)和KL散度(Kullback-LeiblerDivergence)的应用,附代码。【深度学习基础|知识概述】基础数学和理论知识中的信息论知识:交叉熵(Cross-Entropy)和KL散度(Kullback-LeiblerDivergence)的应用,附代码。......
  • CSS 怎么实现两个 div 一个固定宽另一个填充剩余空间?
    当年这可能是一个典型的CSS面试题:“两列布局”。很多年前(大约是10年前吧),有过这样的一个面试题:两列布局,左侧列宽度是20%,右侧列是80%,两列之间的间距是20px,CSS怎样实现这样的一个布局,而且不会出现滚动条!对于题主这个问题,早在当年可能会较为蛋疼一点,或许很多开发者会采用JavaScrip......