[ Nowcoder Contest 167 #C ] 部分和
2024-08-30 22:30:57
\(\\\)
\(Description\)
给出一个长度为\(N\)的数组\(A[i]\),保证\(N\)为 \(2\) 的整次幂。
对于每个 \(i\ (i\in [0,N))\)求所有满足\((i\ \&\ j) == j\) 的\(A[j]\)之和。
- \(N\in [1,2^{20}]\),\(A[i]\in [1,10^3]\)。
\(\\\)
\(Solution\)
考虑每一个\(i\)的答案。
将 \(i\) 按照二进制位分解,那么它的答案就是所有子集的答案。
换句话说,设一共有\(K\)个二进制位,建立数组 \(f[2][2][2][2]....[2]\)分别表示每一位的情况,那么有
\[f[c_1][c_2]...[c_k]=\sum_{d_1=0}^{c_1}\sum_{d_2=0}^{c_2}...\sum_{d_k=0}^{c_k}A[d_1][d_2]...[d_k]
\]
\]
此时\(A\)数组的下标是将原来的十进制数按二进制位分解得到的数。
我们发现这是一个\(K\)维前缀和,因为它是一个子集求和。
然后题解就安利了一个“快速莫比乌斯变换”,其实是另一种高维求前缀和的方法。
一般求二维前缀和我们都是容斥做法,其实还可以每一行先求和,每一列再求和。
这个一样,从低到高按位求和即可,注意只会加上当前一位不同的答案,因为前面固定,后面更小的子集已经在当前要加的对象上累加过一次了。
因为只有两个数所以直接压成一维即可。
\(\\\)
\(Code\)
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1<<21
#define R register
#define gc getchar
using namespace std;
typedef long long ll;
ll n,lim,a[N];
inline ll rd(){
ll x=0; bool f=0; char c=gc();
while(!isdigit(c)){if(c=='-')f=1;c=gc();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return f?-x:x;
}
int main(){
n=rd();
lim=min(20ll,(ll)log2(n)+1);
for(R int i=0;i<n;++i) a[i]=rd();
for(R int i=0;i<=lim;++i){
ll now=1<<i;
for(R int j=0;j<n;++j)
if(j&now) a[j]+=a[j^now];
}
for(R int i=0;i<n;++i) printf("%lld\n",a[i]);
return 0;
}
最新文章
- 浅谈如何使用python抓取网页中的动态数据
- 在 Linux 上配置一个 syslog 服务器
- C# 生成xml文件
- vim does not map customized key?
- 分布式日志2 用redis的队列写日志
- cygwin chmod 失效
- BZOJ1037: [ZJOI2008]生日聚会Party
- String 内在分配解析
- Win32汇编环境配置
- spring-boot启动debug信息中non-fatal error解决
- Headfirst设计模式的C++实现——简单工厂模式(Simple Factory)之二
- [Angular 2] DI in Angular 2 - 1
- C#应用程序获取项目路径的方法总结
- Yii 安装
- class 关键字
- Linux 学习手记(2):Linux文件系统的基本结构
- [转]Node.js tutorial in Visual Studio Code
- thinkphp或thinkcmf 《文章编辑,文章添加》 访问另一个表的分类,添加入另一个表时将id值以(,)逗号分隔储存,编辑时以(,)逗号分隔并且相等的id值被选中
- AndroidO Treble架构分析【转】
- React Native使用 DeviceEventEmitter发送通知emit和监听接收addListener的用法
热门文章
- Ubuntu 16.04创建Swap分区或增加Swap分区容量(转)
- Ubuntu 16.04安装RabbitVCS替代TortoiseSVN/TortoiseGit
- wget: unable to resolve host address “mirrors.163.com” 的解决办法
- SAS学习笔记 - 基本原理与概念
- 浅谈MySQL Capabilities --从调研PHP mysqlnd源码细节角度认识
- hive中使用正則表達式不当导致执行奇慢无比
- OBIEE开发手冊
- JavaScript全局属性/函数
- sql server 生成随机数 rand函数
- FileStream StreamWriter StreamReader BinaryReader