Good Bye 2020 E

大意

给定 \(N\) 和 \(N\) 个数 \(x_1,x_2,...,x_n\) ,

求: \(\sum_{i=1}^n \sum_{j=1}^n \sum_{k=1}^n (x_i \, \& \, x_j) \cdot (x_j \, | \, x_k)\)

思路

说实话这种题第一时间应该想到位运算...我还是太菜了...

考虑一步简单变形 \(\sum_{i=1}^n \sum_{j=1}^n \sum_{k=1}^n (x_i \, \& \, x_j) \cdot (x_j \, | \, x_k) = \sum_{j=1}^n \sum_{i=1}^n (x_i \, \& \, x_j) \sum_{k=1}^n (x_j \, | \, x_k) = \sum_{j=1}^n \left[ \sum_{i=1}^n (x_i \, \& \, x_j) \right] \cdot \left[ \sum_{k=1}^n (x_j \, | \, x_k) \right]\)

然后我们想办法 \(\Theta(log)\) 统计方括号中的式子。

对于固定的 \(x_j\) ,\(\sum_{i=1}^n (x_i \, \& \, x_j)\) 的值就是 \(x_j\) 在二进制下的每一位,分别与 \(x_1,...,x_n\) 做 与 运算的值的累加。

更简单地说,就是 \(x_j\) 在二进制下的每一位,与 \(x_1,...,x_n\) 在二进制下相同的位数做 与 运算的值的累加。

对于 \(x_j\) 为 \(1\) 的位,答案显然就是 \(x_1,...,x_n\) 在二进制相同的位数为 \(1\) 的个数乘以此位代表的 \(2\) 的次幂的值的累加 。

对于 \(x_j\) 为 \(0\) ,显然为 \(0\)

这样对于 \(j\) ,我们在 \(logx_j\) 的时间内求出了答案。

对于 \(\sum_{k=1}^n (x_j \, | \, x_k)\) ,方法类似。

总之,复杂度为 \(\Theta(Nlog(max(x_i)))\)

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;#define ll long long
#define ull unsigned long long
#define cint const int&
#define Pi acos(-1)const int mod = 1e9+7;
const int inf_int = 0x7fffffff;
const ll inf_ll = 0x7fffffffffffffff;
const double ept = 1e-9;int t, n, mx;
ll num[62];
ll a[500500];void deal(ll x) {int cnt=0;while(x) {if(x&1) ++num[cnt];x >>= 1;++cnt;}mx = max(mx, cnt);
}inline ll sol_1(ll x) {int cnt=0;ll tmp = 0;while(x && cnt <= mx) {if(x&1) {tmp = (tmp + ((1ll<<cnt)%mod*num[cnt]) % mod)%mod;}x >>= 1;++cnt;}return tmp;
}inline sol_2(ll x) {int cnt=0;ll tmp = 0;while(cnt <= mx) {if(x&1) {tmp = (tmp + ((1ll<<cnt)%mod*n)%mod)%mod;} else tmp = (tmp + ((1ll<<cnt)%mod*num[cnt]) % mod)%mod;x >>= 1;++cnt;}return tmp;
}int main() {ios::sync_with_stdio(false);cin.tie(0);cin >> t;ll t1, t2, ans;while(t--) {memset(num, 0, sizeof num);ans = mx = 0;cin >> n;for(int i=1; i<=n; i++) cin >> a[i], deal(a[i]);for(int i=1; i<=n; i++) {t1 = sol_1(a[i]);t2 = sol_2(a[i]);ans = (ans + (t1*t2)%mod) % mod;}cout << ans << endl;}return 0;
}

61min,-0

Good Bye 2020 E相关推荐

  1. Codeforces - Good Bye 2020

    Codeforces - Good Bye 2020 前言 A - E 题解 2020的最后一场Codeforces,也算有点纪念意义吧- 赛时差1分钟调出e,一直被1<<i爆int迷惑了 ...

  2. Codeforces Good Bye 2020 补题记录

    系列文章目录 文章目录 系列文章目录 前言 G. Song of the Sirens 前言 我是傻逼 G. Song of the Sirens 给定n和q,字符串s0和t,t的长度为n sis_i ...

  3. 【日程训练】算法脱贫计划

    算法脱贫计划 前言 2020-12-26 2020-12-27 2020-12-28 ~ 2020-1-1 2021-1-1 ~ 2021-1-16 [寒假训练计划]2021-1-17 ~ 2021- ...

  4. Bye 2019,Hi ,我的鼠年 2020 ~

    这是一条很奇怪的前言- 说句实在话,回顾 2019,展望 2020,早想动笔,却深陷回忆. 2019,经历了太多,太多. 时间过的真快,眨眼间,就仿佛在昨天. 曾经的我们,无数次的畅想未来,未来的未来 ...

  5. 2020年,5种将死的编程语言

    来源 | 码农网 译者 | 小峰 曾几何时,几乎每个人都在使用Perl语言编程.但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲.至少我知道有这么个叫做"pieceme ...

  6. 美团点评2020年测试工程师笔试题

    VOL 155 04 2020-09 今天距2021年118天 这是ITester软件测试小栈第155次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  7. 搜狗2020年测试工程师笔试题

    VOL 151 21 2020-08 今天距2021年132天 这是ITester软件测试小栈第151次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  8. 2020年,5 种 将死的编程语言!

    来源 | 码农网 译者 | 小峰 曾几何时,几乎每个人都在使用Perl语言编程.但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲.至少我知道有这么个叫做"pieceme ...

  9. 【转载】DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努力越幸运

    转自:https://yunyaniu.blog.csdn.net/article/details/112040074 DayDayUp:2020,再见了,不平凡的一年,让我懂得了珍惜,让我明白了越努 ...

  10. Python3基本用法 2020.2.20

    Python3基本用法 2020.2.20 Python3简介 Python是一个高层次的结合了解释性.编译性.互动型和面向对象的脚本语言. Python的设计具有很强的可读 %8.5f格式说明符表示 ...

最新文章

  1. RocketMQ 实战 消息发送样例
  2. CISSP备考系列之行政性管理[10-37]
  3. boost::fusion::insert用法的测试程序
  4. .Net平台开源作业调度框架Quartz.Net
  5. python,文件md5校验
  6. ndows 内存诊断工具,win10内存诊断工具 win10自带内存诊断工具的使用
  7. 通过日志对内存泄漏的检查
  8. python检验多重共线性_python从机器学习角度处理共线性
  9. 干涉法测微小量(牛顿环测透镜的曲率半径)
  10. linux系统制作usb启动盘,教你制作Linux操作系统的USB启动盘
  11. 亚马逊抛出“下一代贸易链”整合解决方案:中国跨境电商如何借道转型?
  12. 【C++】复制省略(Copy elision)
  13. 超舒适!超强续航!南卡N2S蓝牙耳机全面评测!
  14. cad怎么将图层后置_CAD中如何将某一个图层置于其他图层之上???
  15. python装饰器原理wraps(method)(self)_理解Python中装饰器最佳方法~
  16. 宝塔docker安装Halo
  17. 荣耀x10max能否升级鸿蒙,坐拥豪华配置:荣耀X10 Max成今年唯一5G大屏手机
  18. Centos7安装MPICH3在配置安装目录时出现问题
  19. 华为方法:如何发展教练|内线?
  20. 使用IIS搭建本地Web服务器(手把手教程)

热门文章

  1. 【SOJ 385】旅馆
  2. 魔方cfop公式软件_如何学习魔方?这份提速心得,亲测有效
  3. AUTOSAR DCM
  4. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + BH1750 + webserver(局域网内查看曲线变化图)
  5. Java课程寒假之开发记账本软件(Android版)之一
  6. 史上最全的英语连读规则一网打尽
  7. 义嘉泰带你了解环境光和接近传感器
  8. 36岁大龄程序员转岗做运营,最让我觉得有价值感的二三事!深度自问
  9. samba文件共享服务器,全网最详细的samba文件共享服务!
  10. C#在VS2019中各种字体颜色的意思