首页 > 其他分享 > Complementary XOR

Complementary XOR

时间:2022-11-08 21:04:09浏览次数:64  
标签:XOR Complementary int 区间 异或 字符串 操作 define

题目链接

题目大意:

给你两个字符串只有01组成,你可以选取区间[l, r],对字符串a在区间里面进行异或操作,对字符串b非区间值进行异或操作,问能否将两个字符串变为全0串。如果可以输出YES, 操作次数, 操作区间。

思路:

将他们全部变成0,等价于将全0变成a, b串。经归纳法可以发现,在进行基数次操作后a,b串每个对应字符都不同,偶数次操作他们每个对应字符都相同。那么我们可以进行的操作方案是将a串上的1全部变为0,如果b[1]=1,那代表b串全部是1,a串全部为0,那么我们可以进行操作(1,1),(1, 2),(2,2)。这样就结束了。

注意:

cout << endl; //速度很慢,不推荐使用
ios :: sync_with_stdio(false);
cin.tie(0);
cout.tie(0); //使用该流解除后将不能使用puts(""), 和scanf(), printf();

 

AC代码:

#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i <= (k); --i)
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector< int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define ld __float128

using namespace std;

const int N = 1e6 + 7;
int n, m, t;
char s[N], p[N];
int a[N], b[N];
void Main() {
	cin >> n;
	cin >> (s + 1) >> (p + 1);
	for (int i = 1; i <= n; i ++ ) {
		a[i] = s[i] - '0';
		b[i] = p[i] - '0';
	}
	for (int i = 1; i <= n; i ++ ) {
		b[i] ^= a[i];
		if (b[i] != b[1]) {
			cout << "NO\n";
			return ;
		}
	}
	vector< pair<int, int> > vc;
	for (int i = 1; i <= n; i ++ ) {
		if (a[i]) {
			vc.emplace_back(i, i);
			b[1] ^= 1;
		}
	}

	if (b[1]) {
		vc.emplace_back(1, 1);
		vc.emplace_back(1, 2);
		vc.emplace_back(2, 2);
	}
	cout << "YES\n";
	cout << sz(vc) << '\n';
	for (auto i : vc)
		cout << i.first << ' ' << i.second << '\n';
}


int main() {
	ios :: sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	while (t--) Main();
	return 0;
}

 

标签:XOR,Complementary,int,区间,异或,字符串,操作,define
From: https://www.cnblogs.com/msluli/p/16871168.html

相关文章

  • AGC034F RNG and XOR(FWT,*)
    AGC034FRNGandXOR\(x\)初始为\(0\),每次会有\(p_{i(/2^N)}\)的概率变成\(x\oplusi\),问对于所有\(0\lek<2^N\),\(x\)第一次变成\(k\)的期望次数。\(N......
  • CF1572B. Xor of 3
    题意给出一个\(01\)序列,一次操作可以选择连续的三个数,把它们都变成三个数的异或和。问能否在\(n\)次以内全变成\(0\),输出方案题解仔细研究发现,无论如何三个数的异......
  • Codeforces Round #778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round) F M
    A-E都还是比较简单的。首先,容易想到的,异或上\(2^k\),相当于以\(2^{k+1}\)的长度分块,然后每一块对半切,然后交换左右部分。我的想法是由于这个交换的性质,也许我们可以尝......
  • CF1743E FTL(哈希,DP)——关于 xorshift 的哈希冲突
    CF1743EFTL有两把laser枪,一把伤害\(p_0\)两发间隔时间至少\(t_0\),另一把\(p_1,t_1\)。打敌方太空船,血量\(N\)防御值\(s\),如果某个时刻你对太空船打出\(P\)的......
  • 【XSY3313】异或和(xorsum)(结论)
    先上一个结论。一个长度为\(n\)的\(01\)序列,其每个子序列的异或和的和为\([序列中包含1]2^{n-1}\)。证明:考虑若不存在\(1\),则显然。否则若存在\(1\),随便选一个......
  • 【CF888G】Xor-MST(01Trie,最小生成树)
    看到异或最值要么是线性基要么是01Trie。线性基显然可以排除。那么先把所有的\(a_i\)插入01Trie内。然后发现对于任意两个数\(a_i\)和\(a_j\):你发现它们在\(......
  • POJ 1222(Gauss消元xor版)
    EXTENDEDLIGHTSOUTDescriptionLightsOut就是下图的游戏,给你一个5*6的矩阵. 你的目标是把灯全关上. 0表示关,1表示开.Input第一行为数据......
  • ARC139F Many Xor Optimization Problems
    题意:给定\(n,m\),求\(n\)个\([0,2^m)\)的数的最大异或和的和。瞎扯:考虑线性基,考虑消元后的,显然唯一,最大异或和为基内所有数的异或和。考虑大小为\(k\)的基方案数为......
  • 【luogu AGC034F】RNG and XOR(FWT)
    RNGandXOR题目链接:luoguAGC034F题目大意给你一个长度为2^n的数组A。一开始有一个\(0\)数,然后每次你随机给它异或上0~2^n-1中的数,随机到\(i\)的概率跟Ai+1......
  • XOR-Hashing
    link一直没听说过这个玩意,做昨天牛客的时候想到异或的结论,但是就是卡在值冲突上了。收集一些例题:CF1175FCF869ECF1622FABC250E......