Educational Codeforces Round 155 (Rated for Div. 2) - D Sum of XOR Functions

news2025/1/9 20:04:30

学到的几个知识点:

1.拆位

对于整体上的异或操作可以转化为31个二进制位上的操作,每一位再×上2^{i} 。

将一次操作拆为31次来方便操作。

2.

s[i]表示异或前缀和,l~r间的异或和为s[r] ^ s[l - 1]    ---->

拆完位后这个公式还能再推出一个性质:

只有s[r] != s[l - 1]时这段区间的异或和才为1,来以右端点为1还是0来讨论一下:

对于每一位1,只有左端点的左边一位为0时才有值,才可以计算进去

对于每一位0,只有左端点的左边一位为1时才有值,才可以计算进去

\sum_{l = 1}^{n}\sum_{r = l}^{n}\sum_{i = 0}^{30}2^{i} * ((s[r] \&1) \wedge (s[l - 1] \& 1)) * (r - (l - 1))

对于一位上的1,设当前为r,左边的为0的点为l,那要承的数就是(r - l),

如果这样的l有k个,就是k * r - (l_{1} + l_{2}+l_{3}+...+l_{k})

这样就算出来了对于每一个数的每一位的贡献 时间复杂度 O(31 * n)

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
 
using namespace std;
 
typedef pair<int, int> PII;
typedef long long ll;
typedef long double ld;

const int N = 300010, mod = 998244353;

int n;
int a[N];
ll f[40][2], cnt[40][2];

int main()
{
	IOS
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		cin >> a[i];
		a[i] ^= a[i - 1];
		//cout << a[i] << ' ';
	}
	//cout << endl;
	
	ll ans = 0;
	for(int i = 0; i <= n; i ++)
	{
		for(int j = 0; j <= 30; j ++)
		{
			if(a[i] >> j & 1)
			{
				ans += (1ll << j) % mod * (((cnt[j][0] * i - f[j][0]) % mod + mod) % mod);
				ans %= mod;
				f[j][1] = (f[j][1] + i) % mod;
				cnt[j][1] ++;
			}
			else
			{
				ans += (1ll << j) % mod * (((cnt[j][1] * i - f[j][1]) % mod + mod) % mod);
				ans %= mod;
				f[j][0] = (f[j][0] + i) % mod;
				cnt[j][0] ++;
			}
		}
	}
	
	cout << ans;
	
	return 0;
}

 

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

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

相关文章

【CentOS7】安装docker

【CentOS7】安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 &#xff0c;通过命令查看你当前的内核版本 。2.使用 root 权限登录 Centos&#xff0c;将 yum 包更新到最新。&#xff08;确保联网&#xff09;3. 如果安装过旧版本的话&#xff0c;卸载旧版本4. 设置yu…

初识Load Runner

Load Runner安装 为什么选择Load Runner Load Runner 有强大的录制功能&#xff0c;Jmeter没有录制功能Load Runner 可以设计丰富的测试场景Load Runner 能够产出丰富的测试报告 Load Runner三大组件之间的关系 每个组件分别是干什么的&#xff1f; virtual User Generator…

搭建Vue的开发环境,Edge浏览器安装VUE拓展工具

一、在下载vue.js文件 在vue官网中下载开发版本的vue.js文件--> 安装 — Vue.js (vuejs.org) 二、将vue.js导入到项目中 这时候我们运行项目控制台会抛出两个错误 三、安装拓展工具 这里以Edge浏览器为例&#xff0c;其他浏览器上可在拓展管理商店中下载 进入Edge的拓展…

python安全工具开发笔记(六)——Python爬虫BeautifulSoup模块的介绍

一、Python爬虫基础知识介绍 1.1 Python相关库 1、requests、re 2、BeautifulSoup 3、hackhttp 1.2 Python BeautifulSoup Python BeautifulSoup模块的使用介绍∶ 1、解析内容 from bs4 import BeautifulSoup soup BeautifulSoup(html_doc) 2、浏览数据 soup.title soup…

C语言 循环结构

while循环和for循环都是入口条件循环&#xff0c;即在循环的每次迭代之前检查测试条件&#xff0c;所以有可能根本不执行循环体中的内容。C语言还有出口条件循环&#xff08;exit-condition loop&#xff09;&#xff0c;即在循环的每次迭代之后检查测试条件&#xff0c;这保证…

Python 比较出2个list中相同的内容,忽略大小写

2个list 比较出相同的内容&#xff0c;忽略大小写 大致思路如下&#xff1a; 首先让list里面的内容都转成大写或者小写&#xff0c;之后在遍历其中一个list 来判断是否在另外一个list中 代码 a ["Apple", "Banana", "Pear", "Peach&q…

快递批量查询高手软件:一键批量分析已揽收单号

每天都需要同时货好几家快递呢&#xff0c;发货的量也是比较大&#xff0c;平时大家时什么跟踪快递呢&#xff0c;如何在大量单号找出已揽收或未揽收单号呢&#xff1f;有没有便捷方法&#xff0c;可以批量筛选出单号呢&#xff0c;想知道得跟着小编往下看。 1.首先我们在电脑…

用原生js写一个弹窗消息提醒插件(转载)

https://www.cnblogs.com/mr-zhima/p/10909950.html 喏&#xff0c;就是这么一个效果。 1. 分析 当消息被触发的时候&#xff0c;会有一个自上而下的淡入过程。在持续了一段时间后会自动的消失&#xff0c;或者是需要用户来手动的点击关闭按钮。在消息消失的时候&#xff0c;…

ChatGPT 现在可以看、听和说话了!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

javaee之黑马乐优商城6

商品品牌的查询 上面就是我们需要根据分类id去找品牌 假设我们现在拿到的是 商品的分类id&#xff0c;我们需要根据分类id查询出对应的品牌即可 下面我们拿到上面的接口&#xff0c;直接撸代码 这个是和品牌相关联的操作&#xff0c;因为先去看一下BrandMapper,这个mapper是…

协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec

SSL的位置-思维导图 参考来源&#xff1a; 华为培训ppt:HCSCE122_SSL VPN技术 ##SSL的位置 SSL协议套件 ​​​​握手阶段&#xff0c;完成验证&#xff0c;协商出密码套件&#xff0c;进而生成对称密钥&#xff0c;用于后续的加密通信。 加密通信阶段&#xff0c;数据由对…

深入理解红黑树

小白慎入&#xff01;本文难度比较高&#xff0c;需要对红黑树有一定的了解再来看&#xff01; 红黑树 红黑树是一种高级数据结构&#xff0c;是平衡树大家族中的一员&#xff0c;并且听名字就知道这个玩意不是凡物&#xff0c;可能你从未听过&#xff0c;但是你一定会为这样的…

微前端无界 项目使用记录

1预期目标和场景 一个vue框架开发的应用&#xff0c;需要使用另一个系统的页面。 通俗来说&#xff0c;就是在一个web应用中独立的运行另一个web应用 2 技术支持 微前端处理方案&#xff1a;无界 无界官网&#xff1a; https://wujie-micro.github.io/doc/guide/ CSDN 参考…

金蝶云星空和聚水潭单据接口对接

金蝶云星空和聚水潭单据接口对接 对接源平台:聚水潭 聚水潭成立于2014年&#xff0c;创始人兼CEO骆海东拥有近三十年传统及电商ERP的研发和实施部署经验。聚水潭创建之初&#xff0c;以电商SaaSERP切入市场&#xff0c;凭借出色的产品和服务&#xff0c;快速获得市场的肯定。随…

如何给Nginx配置访问IP白名单

一、Nginx配置访问IP白名单 有时部署的应用需要只允许某些特定的IP能够访问&#xff0c;其他IP不允许访问&#xff0c;这时&#xff0c;就要设置访问白名单&#xff1b; 设置访问白名单有多种方式&#xff1a; 1.通过网络防火墙配置&#xff0c;例如阿里云/华为云管理平台 2.…

计算机竞赛 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

数独C++代码实现

数独是源自18世纪瑞士的一种数学游戏。中文中“数独”一次&#xff0c;实际上是源自于日语对于数独的音译。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据99盘面上的已知数字&#xff0c;推理出所有剩余空格的数字&#xff0c;并满足每一行、每一列、每一个粗线宫&#xf…

LeetCode 75.颜色分类

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 题意很清楚&#xff0c;让0,1,2按照顺序排好&#xff0c;但是不能使用sort库函数。 将数组分为四部分&#xff0c;分别是&#xff1a; // [0,left] 0 // [left,i] 1 // [i,right] 未…

华为数通方向HCIP-DataCom H12-831题库(单选题:161-180)

第161题 某台路由器Router LSA如图所示,下列说法中错误的是? A、本路由器已建立邻接关系 B、本路由器为DR C、本路由支持外部路由引入 D、本路由器的Router ID为10.0.12.1 答案: B 解析: 一类LSA的在transnet网络中link id值为DR的route id ,但Link id的地址不是10.0.12.…

Unity之NetCode多人网络游戏联机对战教程(4)--连接申请ConnectionApproval

文章目录 前言适用场景1. 准备2.新建GameManager3.编译运行4.脚本详解后话 前言 没看过前面的教程请先阅读前面的教程&#xff0c;本期将会讲到Netcode联机的申请&#xff0c;当一个Client想连接进来&#xff0c;应向Server发送申请联机的信息&#xff0c;然后由服务端向客户端…