首页 > 其他分享 >「CF1713F」Lost Array

「CF1713F」Lost Array

时间:2023-09-20 19:57:29浏览次数:42  
标签:ch Lost text 超集 CF1713F Array texttt define

\(\texttt{「CF1713F」Lost Array}\)

\(\text{Link}\)

\(\texttt{Solution}\)

考虑将前缀贡献转换为路径计数,为方便,将列编号从右向左依次编号为 \(0\sim n\)。考虑 \((0,i)\) 到 \((j,0)\) 的贡献次数其实是 \(\binom{i+j}{i}\),因为是异或,那么可以考虑 \(\binom{i+j}{i}\mod 2\),根据 \(\text{Lucas}\) 定理这其实是 \([i\sub i+j]\).

\[b_i=\bigoplus_{i\ \text{and}\ (i+j)=i}a_j \]

在 \(n=2^k\) 时可以用 \(\text{IFWT}\) 直接做。
我们发现 \((0,0),(1,1),\cdots,(n,n)\) 这些对角线上的元素可以简化我们的式子,具体的

\[a_{i,i}=\bigoplus_{i\sub j}a_{0,j}\\ a_{i,0}=\bigoplus_{j\sub i}a_{j,j}\\ \]

所以我们可以通过对 \(a\) 做一次超集和再做一次子集和得到 \(b\),同理通过对 \(b\) 做一次逆子集和再做一次逆超集和得到 \(a\),因为在异或下,集合容斥的 \((-1)^k\) 系数可以忽略,那么此时超集和等价与逆超集和,子集和等价与逆子集和,所以直接对 \(b\) 做一次子集和再做一次超集和可以得到 \(a\).

\(\texttt{Code}\)

点击查看代码
#include<bits/stdc++.h>
#define MAXN (1000005)
#define MAXT (22)
#define MAXS (1124292)
#define ll long long
using namespace std;
void File()
{
    freopen("/home/noi/A/IO/in.txt","r",stdin);
    freopen("/home/noi/A/IO/out.txt","w",stdout);
}
template<typename type>
void read(type &x)
{
	x=0;char ch=0;bool ff=0;
	while(ch<'0'||ch>'9'){ff|=!(ch^'-');ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	x=ff?-x:x;
}
int n,LG;
int a[MAXN];
int main()
{
    File();
    read(n);
    --n;
    LG=__lg(n);
    for(int i=0;i<=n;i++)
        read(a[i]);
    for(int i=0;i<=LG;i++)
        for(int S=n;S>=0;S--)
            if((S>>i)&1)
                a[S]^=a[S^(1<<i)];
    for(int i=0;i<=LG;i++)
        for(int S=0;S<=n;S++)
            if(((S>>i)&1)^1)
                a[S]^=a[S^(1<<i)];
    for(int i=n;i>=0;i--)
        printf("%d ",a[i]);
}

标签:ch,Lost,text,超集,CF1713F,Array,texttt,define
From: https://www.cnblogs.com/JIEGEHHHH/p/17718218.html

相关文章

  • Friendly Arrays题解
    2023-09-18题目FriendlyArrays难度&重要性(1~10):5题目来源luogu题目算法贪心解题思路一道大水题。这道题解法非常的套路,我们需要对于处理按位或和按位异或时,首先就要把数拆成二进制的形式去考虑。首先我们需要简单了解一下按位或和按位异或的运算规则:按位或,对于两......
  • Java学习之路--array--数组
    packagecom.chao.array;/*数组定义:1.数组市相同类型数据的有序集合2.数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成3.其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们数组声明创建首先必须声明数组变量,才能在程序中使用数组,声明数组变......
  • CF1599E Two Arrays
    Dq17y。考虑斐波那契通项公式,分别维护区间\(\left(\frac{1+\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)和\(\left(\frac{1-\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)的和。显然可以扩域,定义一个\(n=a+\sqrt5b\)的结构体即可。然后快速求斐波那契数列某项就可以直接快速幂了。......
  • array_diff顺序问题
    array_diff顺序问题array_diff($A,$B)和array_diff($B,$A)的结果一样吗?array_diff($A,$B)和array_diff($B,$A)的结果是不同的,因为它们的参数顺序不同,这会影响到差集的计算。差集操作是有序的,它首先考虑第一个集合,然后从中排除与第二个集合中相匹配的元素。例如,假设:......
  • Java List和Array之间的转换
    一.Array转为List1.实现方法:java中数组转list使用Arrays.asList(T...a)方法。1.publicclassArray2List{2.publicstaticvoidmain(String[]args){3.listA=Arrays.asList("dog","cat","cow");4.String[]strs={"dog",&qu......
  • Glide源码阅读之适配器模式【ArrayAdapterInterface<T>】
    定义菜鸟教程介绍意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。何时使用:1、系统需要使......
  • System API——arraycopy
    System.arraycopy(参数1,参数2,参数3,参数4,参数5)参数1:数据源,要拷贝的数据从哪个数组来参数2:从数据源数组中的第几个索引开始拷贝参数3:目的地,要把数据拷贝到哪个数组中参数4:目的地数组的索引参数5:拷贝的个数......
  • CF 1867 E1. Salyg1n and Array (simple version)
    Link简单版本的结论还是很容易猜到的。首先很容易想到的第一步就是尽可能地不覆盖地取尽可能多地区间,最后剩下了一小块。然后在接着原来的指针一个一个地往右问,直到不能问了为止。为什么这样是正确的呢?首先,在这样一步一步地往右查询的过程中,我们会发现总是前$k-1个数加上后面......
  • 利用SharedArrayBuffer进行多线程编程
    利用SharedArrayBuffer进行多线程编程在现代Web应用程序中,性能是一个至关重要的因素。为了提高Web应用程序的性能,我们经常需要执行并行计算,例如图像处理、音频处理或数据分析。在这种情况下,多线程编程是一种强大的工具,它允许我们充分利用多核处理器。然而,多线程编程并不是一件容易......
  • CF1852B Imbalanced Arrays 题解
    CF1852BImbalancedArrays题解Links洛谷CodeforcesDescription对于一个给定的长度为\(n\)的数组\(A\),定义一个长度为\(n\)的数组\(B\)是不平衡的当且仅当以下全部条件满足:\(-n\leqB_{i}\leqn\)且\(B_{i}\ne0\)。即每个数在\([-n,n]\)内且不为\(0\)。......