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的更多相关文章

  1. [题解] Atcoder Regular Contest ARC 151 A B C D E 题解

    点我看题 昨天刚打的ARC,题目质量还是不错的. A - Equal Hamming Distances 对于一个位置i,如果\(S_i=T_i\),那么不管\(U\)的这个位置填什么,对到\(S\) ...

  2. AtCoder Regular Contest 151补题

    AtCoder Regular Contest 151 A. Equal Hamming Distances 简单题,注意下答案需要字典序最小即可 #include<bits/stdc++.h& ...

  3. ARC145~152 题解

    比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...

  4. 【Note】矩阵加速

    感谢 \(\text{tidongCrazy}\) 倾情授课. 目录 基本形式 基础习题 P1962 斐波那契数列(例题) P4838 P哥破解密码(矩阵加速) 稍微up P1397 [NOI2013 ...

  5. 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 ...

  6. CodeForces 485C Bits[贪心 二进制]

    C. Bits time limit per test1 second memory limit per test256 megabytes inputstandard input outputsta ...

  7. LUXURY 8

    A - Gargari and Bishops Time Limit:3000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  8. 第二十次codeforces竞技结束 #276 Div 2

    真是状况百出的一次CF啊-- 终于还Unrated了,你让半夜打cf 的我们怎样释怀(中途茫茫多的人都退场了)--虽说打得也不好-- 在这里写一下这一场codeforces的解题报告.A-E的 题目及 ...

  9. USD词汇表(USD Glossary)

    这篇文章是在学习USD的过程中龟速写成的,目的是将USD的核心设计.相关概念的说明.以及配套API整理出来,为后续进行的USD开发工作提供中文资料支持. 实际上也只有充分理解了USD设计中的每一个知识 ...

  10. codeforces484A

    Bits CodeForces - 484A Let's denote as  the number of bits set ('1' bits) in the binary representati ...

随机推荐

  1. MSI Afterburner 使用

    MSI Afterburner 是一款显卡超频软件,同时可以监测硬件运行数据(CPU 温度.GPU 温度.帧率.帧生成时间等).与其捆绑安装的 RivaTuner Statistics Server ...

  2. 高维前缀和 (SOSDP)

    算法介绍--高维前缀和 引入 我们都知道二维前缀和有这么一个容斥的写法: for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ s[i][j]=s[i ...

  3. if else 代码优化实战

    前言 介绍几种方法,不使用if else语句也能做条件判断. 一:使用枚举 首先定义一个公用接口 RoleOperation,表示不同角色所能做的操作 package com.gavin.enums; ...

  4. Docker 知识梳理及其安装使用

    Docker 介绍 Docker 是一个强大的工具,用于高效开发.打包和部署应用程序.Docker 是一种容器管理服务.Docker 于 2013 年发布.它是开源的,可用于 Windows.macO ...

  5. sql 查询死锁

    1 -- 查询死锁 2 --第一种 3 sp_lock 4 5 --第二种 6 select object_name(resource_associated_entity_id) as tableNa ...

  6. JAVA与.NET DES加密解密

    项目需要在两个系统间采用DES加密,一个系统为JAVA开发的,另外一个.Net开发的 在网上找了很多写法但加密出的数据两个系统都无法匹配, 在做了小修改以后终于可以用了,已经测试过 JAVA版本 im ...

  7. Nuxt Kit 中的模板处理

    title: Nuxt Kit 中的模板处理 date: 2024/9/20 updated: 2024/9/20 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt ...

  8. Flutter Engage China 开发者常见问题解答 | 下篇

    再次感谢大家对 Flutter Engage China 活动 的关注和积极参与!我们在活动前后收到了很多来自开发者的反馈和问题,Flutter 团队和演讲嘉宾在直播 Q&A 环节中也针对部分 ...

  9. USB总线-Linux内核USB3.0主机控制器驱动框架分析(十二)

    1.概述 如下图所示,Linux内核中USB主机体系结构由五部分组成,分别为Application Software.USB Class Driver.USB Core((USB Driver).US ...

  10. 深度解析Spring AI:请求与响应机制的核心逻辑

    我们在前面的两个章节中基本上对Spring Boot 3版本的新变化进行了全面的回顾,以确保在接下来研究Spring AI时能够避免任何潜在的问题.今天,我们终于可以直接进入主题:Spring AI是 ...