ARC151D Binary Representations and Queries
ARC151D Binary Representations and Queries
题目链接:ARC151D Binary Representations and Queries
非常好思维题。
思路
首先我们会发现每个操作都是 \(\frac{n}{2}\) 的 \(A_i\),给另外 \(\frac{n}{2}\) 的 \(A_j\) 的增加。
这题直接去维护每个操作时间复杂度会开心的笑。
所以我们换个思路,先去探究一下这题的性质。
考虑一下,是否操作直接可以交换顺序?
反正我觉得不可以
现在我们来证明一下,交换操作不会对答案造成影响(这里交换的前提是要求 \(x_i\neq x_j\))。
设有操作 \(i,j\),且 \(x_i\neq x_j,i<j\)。
那么我们可以将 \(2^n\) 个下标分为 \(4\) 个集合。
1.\(b_{x_i}=y_i\) 且 \(b_{x_j}=y_j\)。
2.\(b_{x_i}=y_i\) 且 \(b_{x_j}\neq y_i\)。
3.\(b_{x_i}\neq y_i\) 且 \(b_{x_j}=y_j\)。
4.\(b_{x_i} \neq y_i\) 且 \(b_{x_j}\neq y_j\)。
这里的 \(b_i\) 表示第 \(i\) 位二进制的数。
我们将集合 \(u\) 向 \(v\) 连有向边,表示集合 \(u\) 内的下标会给 \(v\) 内的下标做贡献,边的权值为这次操作的编号。
注意这里的权值仅表示操作的编号。

如果先做操作 \(i\),每个集合最终所得到的值如下:
\(2\gets 1\)。
\(3 \gets 1\)。
\(4 \gets 2+3+1\)。
如果先做操作 \(j\),每个集合最终所得到的值如下:
\(2\gets 1\)。
\(3 \gets 1\)。
\(4 \gets 3+2+1\)。
不难发现,每个集合所得到的值并没有发生变化。
也就是说,只要满足 \(x_i\neq x_j\),我们是可以交换操作的。
有了这个性质,我们考虑把所有 \(x_i\) 相等的操作交换到一起操作。
这样就被分成了两个集合,这两个集合间互相给对方做贡献,方便我们快速统计每个集合收到贡献的系数。
这样就可以快速求 \(A_i\) 了。
时间复杂的 \(O(n\log n)\)。
CODE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
const int maxn=3e5+5;
int n,q;
ll a[maxn],tmp[maxn];
vector<int>tag[20];
int main()
{
scanf("%d%d",&n,&q);
for(int i=0;i<(1<<n);i++) scanf("%lld",&a[i]);
for(int i=1;i<=q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
tag[x].push_back(y);
}
for(int i=0;i<n;i++)
{
int x_1=1,y_1=0,x_0=1,y_0=0;//x是自己对自己的贡献系数,y是对方对自己的贡献系数
for(int k:tag[i])
{
if(k) x_0=(x_0+y_1)%mod,y_0=(y_0+x_1)%mod;
else x_1=(x_1+y_0)%mod,y_1=(y_1+x_0)%mod;
}
for(int j=0;j<(1<<n);j++)
{
if((j>>i)&1) tmp[j]=(x_1*a[j]%mod+y_1*a[j^(1<<i)]%mod)%mod;
else tmp[j]=(x_0*a[j]%mod+y_0*a[j^(1<<i)]%mod)%mod;
}
for(int j=0;j<(1<<n);j++) a[j]=tmp[j];
}
for(int j=0;j<(1<<n);j++) printf("%lld ",a[j]);
}
ARC151D Binary Representations and Queries的更多相关文章
- [题解] Atcoder Regular Contest ARC 151 A B C D E 题解
点我看题 昨天刚打的ARC,题目质量还是不错的. A - Equal Hamming Distances 对于一个位置i,如果\(S_i=T_i\),那么不管\(U\)的这个位置填什么,对到\(S\) ...
- AtCoder Regular Contest 151补题
AtCoder Regular Contest 151 A. Equal Hamming Distances 简单题,注意下答案需要字典序最小即可 #include<bits/stdc++.h& ...
- ARC145~152 题解
比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...
- 【Note】矩阵加速
感谢 \(\text{tidongCrazy}\) 倾情授课. 目录 基本形式 基础习题 P1962 斐波那契数列(例题) P4838 P哥破解密码(矩阵加速) 稍微up P1397 [NOI2013 ...
- A. You Are Given Two Binary Strings…
A. You Are Given Two Binary Strings… You are given two binary strings x and y, which are binary repr ...
- CodeForces 485C Bits[贪心 二进制]
C. Bits time limit per test1 second memory limit per test256 megabytes inputstandard input outputsta ...
- LUXURY 8
A - Gargari and Bishops Time Limit:3000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- 第二十次codeforces竞技结束 #276 Div 2
真是状况百出的一次CF啊-- 终于还Unrated了,你让半夜打cf 的我们怎样释怀(中途茫茫多的人都退场了)--虽说打得也不好-- 在这里写一下这一场codeforces的解题报告.A-E的 题目及 ...
- USD词汇表(USD Glossary)
这篇文章是在学习USD的过程中龟速写成的,目的是将USD的核心设计.相关概念的说明.以及配套API整理出来,为后续进行的USD开发工作提供中文资料支持. 实际上也只有充分理解了USD设计中的每一个知识 ...
- codeforces484A
Bits CodeForces - 484A Let's denote as the number of bits set ('1' bits) in the binary representati ...
随机推荐
- 将文件的换行符由 CRLF 转换为 LF
在 DOS/Windows 文本文件中,换行,也称为新行,是两个字符的组合:回车(CR)后跟一个换行(LF).在 Unix 文本文件中,一行的换行是单个字符:换行(LF).在 Mac 文本文件中,在 ...
- LaTeX 插入伪代码
使用 algorithm 包和 algpseudocode 包 algorithm 包 用途: 提供一个浮动体环境来包含算法(类似于 figure 和 table 环境),使得算法可以自动编号并出现在 ...
- 最简!手把手带你完美删除Vmware虚拟机!
Vmware虚拟机最简完美删除教程 你还在苦于无法完美删除Vmware虚拟机吗?你还在为自己千疮百孔的系统而烦恼吗?你还在为想要重做Vmware但没删干净各种报错而烦操吗?但今天之后这些问题都将不是问 ...
- 一个故事讲解https
1 序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎么还是你?!). 这俩哥们隔着千 ...
- IDEA 2023.2 最新安装使用教程(附激活码,亲测好用)
申明:本教程 IDEA 补丁.补丁均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.若条件允许,希望大家购买正版 ! idea激活码使用教程 Step1 第一步下载IDEA软件 ID ...
- java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator 问题解决
目录 报错情况 分析原因 解决方法 本文author:@愷龍 报错情况 在一次使用JSP的jstl时候按照正常引入jstl和使用for each标签出现了如下报错: 分析原因 经过一番调查研究发现原因 ...
- 如何高效的阅读paper--三遍阅读法
第一遍 1.阅读文章的标题.摘要和介绍 2.阅读每一节的标题和副标题 3.阅读总结 4.浏览参考文献,看看是否有曾经读过的文章 在完成第一遍后,应该做到: 1.能够说出该篇论文的类型 2.能够说出文章 ...
- webpack高版本抽离css样式报错[已解决]
全局安装的webpack版本是5.51.1,webpack-cli是4.9的版本; 本来想用 extract-text-webpack-plugin 的,但是报错了,查了一下文档 发现,已经不支持新版 ...
- Dockerfile相关(推送镜像?私有仓库?)(九)
上面我们讲到了 Dockerfile 的基本写法以及构建镜像的时候一些注意事项,那么镜像构建完成后,如何把我们的镜像给到别人使用呢?第一种方法就是利用 Docker 官方提供的公共的 Docker H ...
- 深入理解 Nuxt.js 中的 app:data:refresh 钩子
title: 深入理解 Nuxt.js 中的 app:data:refresh 钩子 date: 2024/9/29 updated: 2024/9/29 author: cmdragon excer ...