首页 > 其他分享 >题解 CF1713F【Lost Array】

题解 CF1713F【Lost Array】

时间:2022-12-09 21:11:34浏览次数:67  
标签:int 题解 void long CF1713F read text Array define

首先,为了方便将第 \(1\) 行的数从右往左重标号为 \(0, 1, \cdots, n - 1\)。我们发现 \((1, i)\) 对于 \((j,n+1)\) 的贡献是 \(C(i + j, i) \pmod 2\),根据 \(\text{lucas}\) 定理可得有贡献当且仅当 \(i\ \text{and}\ j = 0\)。

考虑容斥,枚举 \(k\),钦定 \(i\ \text{and}\ j\) 在二进制下为 \(k\) 的超集。令 \(i\ \text{and}\ j=t\),则会被贡献次数为 \(2^{\text{popcount}(k)}\)。于是,直接异或即可。

时间复杂度 \(O(n^{\log_2{3}})\approx O(n^{1.585})\),大概是 \(10^9\) 次的位运算,但由于是位运算,所以可以稳过。(另外观察到对于不同的 \(i\) 可以高位前缀和得到一样的结果)

#include <bits/stdc++.h>
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> void chkmax(T &x, T y) {x = max(x, y); }
template <typename T> void chkmin(T &x, T y) {x = min(x, y); }
template <typename T> void read(T &x) {
	x = 0; int f = 1; char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
	for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
	x *= f;
}
const int N = 5e5 + 10;
int b[N], t[N];
signed main() {
	int n; read(n);
	for (int i = 0; i < n; ++i) read(b[i]);
	int lg = log2(n);
	for (int i = 0; i < n; ++i) {
		t[i] = b[0];
		for (int j = i; j; j = (j - 1) & i) t[i] ^= b[j];
	}
	F(l, 0, lg)
		for (int i = 0; i < n; ++i)
			if ((i >> l) & 1) t[i ^ (1 << l)] ^= t[i];
	for (int i = n - 1; ~i; --i) cout << t[i] << " ";
	return 0;
}

标签:int,题解,void,long,CF1713F,read,text,Array,define
From: https://www.cnblogs.com/zhaohaikun/p/16970007.html

相关文章

  • Android内存优化(使用SparseArray和ArrayMap代替HashMap)
    在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性......
  • OC之【NSArray使用】
    #import<Foundation/Foundation.h>#import"Student.h"创建一个数组void//创建一个空的数组NSArray*array=[NSArrayarray];//创建有1个元素的数组NSAr......
  • OC之【NSMutableArray的使用】
    #import<Foundation/Foundation.h>#import"Student.h"voidNSMutableArray*array=[NSMutableArrayarrayWithObject:@"1"];//添加元素addObject:@"2"];addObj......
  • P8377 [PFOI Round1] 暴龙的火锅 题解
    题目传送门题目背景暴龙爱吃火锅。题目描述定义\(S(x)\)表示\(x\)的每一位的数字之和,例如:\(S(14)=1+4=5\),\(S(114514)=1+1+4+5+1+4=16.\)另外,定义\(fib(x)\)代......
  • js base64与Uint8Array互转
    1.情景展示base64如何转Uint8Array?Uint8Array如何转成base64?2.base64转Uint8Array/***base64字符串转为uint8array数组*/constbase64ToUint8Array=functio......
  • CF1458C 题解
    题意传送门\(T\)组测试数据,每次给一个\(n\timesn\)的矩阵,每行每列都是个\(1\ton\)的排列。有\(m\)次操作,如果是UDLR就是要把整个矩阵每行/每列往一个方向循环......
  • Java中将 int[] 数组 转换为 List(ArrayList)
    前言说起数组转换成ArrayList,很多同学第一反应就是遍历数组,将元素逐个添加到ArrayList中,但是这个看着就lower,一般不会这么答。所以马上就会想到Arrays工具类的asLis......
  • Arrays类
    1.Arrays类常见方法应用案例源码:toString()publicclassArraysMethod01{publicstaticvoidmain(String[]args){Integer[]integers={1,20,9......
  • 当远程设备或者计算机不接受连接 问题解决
    远程设备或计算机不接受连接问题解决tmd一大中午打开电脑发现没网手机却有网给电脑连上热点也不行真tmd晦气解决方法这三个东西都勾选取消 ......
  • CF1218G Alpha planetary system 题解
    Part1设\(w_x\)表示点\(x\)的权值\(\bmod3\),\(c_x\)表示\(x\)的所属集合编号(\(c_x\in\{0,1,2\}\)),\(v_i\)表示第\(i\)条边的权值。一个直接的想法是使所有......