当前位置: 首页 > news >正文

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

学到的几个知识点:

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()
{IOScin >> 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.lryc.cn/news/176363.html

相关文章:

  • [C++ 网络协议] I/O流分离所带来的半关闭问题
  • 根据文章段落内容自动插入图片php版
  • 在GEHC的第一个sprint记录
  • MFC 绘图
  • 算法 用两个栈实现队列-(栈+队列)
  • Android单编模块报FAILED: ninja: unknown target ‘MODULES-IN-vendor错误解决
  • 地球的某一片红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——旅行季许少辉八月新书辉少许想象和世界一样宽广
  • Zookeeper-命令操作
  • eclipse 添加注释
  • Linux网络编程- 网络字节顺序
  • 如何永久关闭WPS任务窗口?
  • Cesium 问题:加载 geojson 数据量大浏览器会崩,使用primitive方式加载
  • C++ Primer----1.5类简介 章节练习
  • 爬楼梯Java(斐波那契数列)
  • Maven项目package为jar包后在window运行报A JNI error has occurred
  • iview 的table表格组件使单元格可编辑和输入
  • 统计的基本概念及抽样分布
  • 【C++】class的设计与使用(四)this指针
  • mysql 导入sql文件
  • springcloud:三、ribbon负载均衡原理+调整策略+饥饿加载
  • 【Unity编辑器扩展】Tranform组件自定义扩展,复制位置旋转缩放数据
  • 自动驾驶领域中的CMS系统应用探讨
  • 十分钟理解OSPF路由协议
  • Python 编程基础 | 第一章-预备知识 | 1.4、包管理工具
  • delphi中使用CADVCL 10.0 Enterprise控件解析DXF文件生成图片保存到本地
  • Hazelcast系列(三):hazelcast管理中心
  • QT 绘画功能的时钟
  • 设计模式之道-模板方法模式
  • 头哥的实践平台的Linux文件/目录管理
  • 软件测试基本常识