NOIP2023模拟13联测34 origen

题目大意

给定 n n n个整数 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1,a2,,an,求

∑ i = 1 n ∑ j = i n ( ⨁ k = i j a k ) 2 \sum\limits_{i=1}^n\sum\limits_{j=i}^n(\bigoplus\limits _{k=i}^ja_k)^2 i=1nj=in(k=ijak)2

输出答案模 998244353 998244353 998244353后的值。

注: ⨁ k = i j a k = a i ⊕ a i + 1 ⊕ ⋯ ⊕ a j \bigoplus\limits _{k=i}^ja_k=a_i\oplus a_{i+1}\oplus \cdots \oplus a_j k=ijak=aiai+1aj

1 ≤ n ≤ 2 × 1 0 5 , 1 ≤ a i ≤ 2 × 1 0 5 1\leq n\leq 2\times 10^5,1\leq a_i\leq 2\times 10^5 1n2×105,1ai2×105


题解

d i = ⨁ j = 1 i a j d_i=\bigoplus\limits _{j=1}^ia_j di=j=1iaj,则原式变为

∑ i = 1 n ∑ j = i n ( d j ⊕ d i − 1 ) 2 \sum\limits_{i=1}^n\sum\limits_{j=i}^n(d_j\oplus d_{i-1})^2 i=1nj=in(djdi1)2

我们按位来考虑,枚举每一位 k k k,那么原式变为

∑ k = 0 m x 2 k ∑ ( d j ⊕ d i − 1 ) & 2 k = 2 k ( d j ⊕ d i − 1 ) \sum\limits_{k=0}^{mx}2^k\sum\limits_{(d_j\oplus d_{i-1})\& 2^k=2^k}(d_j\oplus d_{i-1}) k=0mx2k(djdi1)&2k=2k(djdi1)

其中 m x mx mx表示所有 d i d_i di的二进制最高位的是从低到高的第几位。

我们可以用 v e c t o r vector vector来存每一位为 0 0 0或为 1 1 1的数。也就是说,对于每个数 d i d_i di,枚举它的每一位 k k k,如果这一位为 0 0 0,则将 d i d_i di放在 v k , 0 v_{k,0} vk,0中;如果这一位为 1 1 1,则将 d i d_i di放在 v k , 1 v_{k,1} vk,1中。这里的 v k , 0 / 1 v_{k,0/1} vk,0/1 v e c t o r vector vector类型的。

然后,枚举每一个 k k k,我们要求的就是 ∑ ( d j ⊕ d i − 1 ) & 2 k = 2 k ( d j ⊕ d i − 1 ) \sum\limits_{(d_j\oplus d_{i-1})\& 2^k=2^k}(d_j\oplus d_{i-1}) (djdi1)&2k=2k(djdi1)。既然要异或后的第 k k k位为 1 1 1,那么 d j d_j dj d i − 1 d_{i-1} di1的第 k k k位肯定不同。那么,我们需要求 v k , 0 v_{k,0} vk,0 v k , 1 v_{k,1} vk,1中各取一个数来异或,然后将所有情况求和。

这怎么处理呢?我们还是按每一位来计算。枚举每一位 t t t,如果异或和的第 t t t位为 1 1 1,则在 v k , 0 v_{k,0} vk,0中选的数和 v k , 1 v_{k,1} vk,1中选的数的第 t t t位肯定不同。那么,我们记录 v k , 0 v_{k,0} vk,0中的每一位 t t t有多少个数为 0 0 0,多少个数为 1 1 1,记为 h v t , 0 / 1 hv_{t,0/1} hvt,0/1,那么对于 v k , 1 v_{k,1} vk,1中的每一位 t t t,设这一位为 v v v v v v的值为 0 0 0 1 1 1),其贡献为 2 t × h v t , 1 − v 2^t\times hv_{t,1-v} 2t×hvt,1v

注意 d 0 d_0 d0也要加入 v e c t o r vector vector。因为这是 v k , 0 v_{k,0} vk,0中的数异或 v k , 1 v_{k,1} vk,1中的数,所以是有序的,不需要除以 2 2 2

时间复杂度为 O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)

code

#include<bits/stdc++.h>
using namespace std;
const int N=200000;
const long long mod=998244353;
int n,a[N+5],b[N+5],hv[25][2];
long long ans=0;
vector<int>v[25][2];
int main()
{
//	freopen("origen.in","r",stdin);
//	freopen("origen.out","w",stdout);scanf("%d",&n);for(int j=0;j<=19;j++){v[j][0].push_back(0);}for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=b[i-1]^a[i];for(int j=0;j<=19;j++){v[j][(b[i]>>j)&1].push_back(b[i]);}}for(int i=0;i<=19;i++){for(int j=0;j<=19;j++) hv[j][0]=hv[j][1]=0;for(int j=0;j<v[i][0].size();j++){int t=v[i][0][j];for(int k=0;k<=19;k++){++hv[k][(t>>k)&1];}}long long tmp=0;for(int j=0;j<v[i][1].size();j++){int t=v[i][1][j];for(int k=0;k<=19;k++){int vk=((t>>k)&1)^1;tmp=(tmp+1ll*hv[k][vk]*(1<<k))%mod;}}ans=(ans+tmp*(1<<i))%mod;}printf("%lld",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter分布式压测 —— 易踩坑点

1、压测机 无论是从成本角度还是维护的难易方面&#xff0c;压测机的数量&#xff0c;适量就好。举个例子&#xff0c;8C16G的一台服务器&#xff0c;部署Jmeter后&#xff0c;根据我个人的测试比对数据&#xff0c;配置≤1500个线程数&#xff0c;最好。太多了性能损耗较大&a…

QT实现的一个MVP设计模式demo

最近做qt 项目,发现网上基于MVP设计模式的QT例程很少&#xff0c;这里写一个demo示例可作为参考&#xff1a; 一、简要概述 MVP是由MVC发展而来&#xff0c;总体目的与作用相同。都是为了软件构架有层次之分&#xff0c;使得核心逻辑、界面控制、数据这三者分层清晰明了。减少…

RabbitMQ 死信队列

在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实际是将死信发送给了死信交换机&#xf…

QtC++与QLineEdit详解

介绍 QLineEdit 是 Qt 中的文本输入控件&#xff0c;用于在用户界面中接收和显示文本输入。它是一个非常常见的小部件&#xff0c;用于各种应用程序&#xff0c;以下是对 QLineEdit 在 Qt 中的详细讲解和作用&#xff1a; 文本输入&#xff1a; QLineEdit 允许用户输入文本&am…

要在CentOS中安装Docker

Docker部署 在CentOS中安装Docker要在CentOS中安装Docker&#xff0c;请按照以下步骤进行操作&#xff1a;启动和校验常用命令查看容器启动容器 配置镜像加速 在CentOS中安装Docker 要在CentOS中安装Docker&#xff0c;请按照以下步骤进行操作&#xff1a; 首先&#xff0c;确…

apache-maven-3.6.3 安装配置教程

链接&#xff1a;https://pan.baidu.com/s/1RkMXipnvac9EKcZyUStfGQ?pwdl32m 提取码&#xff1a;l32m 1. 将 maven 压缩包解压至指定文件夹 2. 配置环境变量 &#xff08;1&#xff09;打开此电脑-> 鼠标右键选择属性->点击高级系统设置 &#xff08;2&#xff09;点…

软件测试简历这样写,一周能约七个面试

简历到底有多重要&#xff1f; 俗话说&#xff1a;“简历就是你能否进入一家公司的敲门砖”。面试官只有看到一份有质量的简历才会给你一个面试的机会。 很多人都会有这样的问题&#xff0c;为什么我投了那么多简历&#xff0c;都没有接到面试通知&#xff1f;也没有HR和我电…

“菊风Juphoon”邀您莅临11月22-24日CNF南京应急展消防展 | 展位号:115-1

公司简介 菊风依托互联网和电信网音视频融合技术积累&#xff0c;提供智能化的音视频统一通信产品及服务。面向应急管理、消防救援、智慧城市等多个领域&#xff0c;菊风推出适用于全网通的统一通信一体机、统一通信平台。 此外&#xff0c;菊风还提供视频能力平台&#xff0…

JavaScript设计模式之责任链模式

适用场景&#xff1a;一个完整的流程&#xff0c;中间分成多个环节&#xff0c;各个环节之间存在一定的顺序关系&#xff0c;同时中间的环节的个数不一定&#xff0c;可能添加环节&#xff0c;也可能减少环节&#xff0c;只要保证顺序关系就可以。 如下图&#xff1a; ES5写法…

Qt QTableView排序

1.简介 在开发过程中&#xff0c;我们需要通过点击表头来对QTableView或QTreeView等一系列高级视图进行排序操作&#xff0c;以下是进行排序的步骤。 步骤&#xff1a; 首先创建了一个QStandardItemModel对象或者继承QAbstractTableModel类作为数据模型&#xff0c;并设置了…

如何实现Word文档中的书签双向定位

工作中&#xff0c;经常需要拟定合同&#xff0c;一般都有固定的模板&#xff0c;在特定的位置填写内容。通过zOffice编辑合同文件时&#xff0c;可以在模板需要填写的位置预设书签&#xff0c;配合zOffice SDK使用&#xff0c;利用zOffice书签双向定位的特性&#xff0c;更方便…

4.求1000以内的所有完数

#include<stdio.h> // 完数&#xff1a;一个数的所有的真因子 (即除了自身以外的约数)的和&#xff0c;恰好等于它自身 // 1 不是完数 // 4的因子&#xff1a;1 2 4 除了本身 4 不等于 1&#xff0b;2 所以4不是完数void fun(void){int sum,i,j;for(i2;i<1000;i)…

C语言--结构体(内容超级详细)

一.前言 通过数据类型来定义一个一个的变量,当需要很多相同类型的变量时有数组。基本数据类型在使用时 很方便,但是利用它们来描述现实世界就显得捉襟见肘。例如需要保存一个班学生的信息”姓名,年龄,分 数”,按照前面的学习需要单独定义三个数组,一个保存姓名,一个保存年龄,一…

如何使新手小白编码能力暴涨之Devchat-AI

在这个快速发展的时代&#xff0c;开发者的任务越来越繁重&#xff0c;要求他们快速、高效地完成开发任务。然而&#xff0c;传统的开发方式已经无法满足这个需求。在这种情况下&#xff0c;Devchat的出现给开发者带来了新的帮助。Devchat是一个研发效能分析平台&#xff0c;它…

Java8强大的新特性 —— “Stream API”

一、什么是Stream API&#xff1f; Java Stream API是Java 8中引入的一个重要功能&#xff0c;它允许开发者以声明性方式处理数据集合&#xff0c;使代码更加简洁、可读性更好&#xff0c;同时还提供了并行操作的能力&#xff0c;从而能够更有效地利用多核处理器。 Stream AP…

勒索病毒最新变种.360勒索病毒来袭,如何恢复受感染的数据?

尊敬的读者&#xff1a; 随着网络犯罪日益猖獗&#xff0c;.360勒索病毒&#xff08;或称360 Ransomware&#xff09;已成为数字时代的严重威胁之一。这种恶意软件以其数据加密技术而臭名昭著&#xff0c;通常通过欺诈邮件附件、恶意链接或漏洞利用传播。本文将深入介绍.360勒…

Linux下怎样使用core文件查看异常崩溃的程序问题

之前在写程序的时候&#xff0c;遇到了意外崩溃的问题&#xff0c;但是当时并没有生成core文件&#xff0c;想用gdb 对程序进行单步跟踪时&#xff0c;并不能复现。所以想要用core文件看看到底是哪里的问题&#xff0c;这里把问题记录下来当再次遇到时可以解决。 Linux CentOS…

【达梦数据库】学习笔记

【达梦数据库】学习笔记 【一】如何使用idea连接达梦数据库【二】idea项目导入本地的达梦数据库驱动jar包 【一】如何使用idea连接达梦数据库 &#xff08;1&#xff09;打开idea&#xff0c;点击右上角的数据库 &#xff08;2&#xff09;把达梦数据库的jar包配置一下 找到…

Centos7部署Python3环境

一、安装Python3 ###查看是否安装Python3 Centos 7 默认安装了python 2.7.5. 因为一些命令要用它比如yum 它使用的是python2.7.5 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查看一下Python可执行文件的位置 Python指向的是Python2.7 安装依赖 y…

武汉某母婴用品公司 - 集简云连接ERP和营销系统,实现库存管理的自动化

品牌介绍与关怀理念 武汉某母婴用品公司是一家专注于高端孕婴童护理用品的企业&#xff0c;积极响应和关怀孕产人群&#xff0c;全方位提供从待产用品到产后护理用品&#xff0c;再到婴童洗护用品和初生婴儿用品等一系列全面的母婴产品。我们的使命是满足客户的需求&#xff0…