题目大意

有TTT组数据,每组数据给定两个l,n∈N∗l,n\in\mathbb{N*}l,n∈N∗,构造一个长为lll,每个元素不超过nnn的数组
令他为aaa,要使
∑i=1l∑j=1i−1ai⊕aj\sum_{i=1}^l\sum_{j=1}^{i-1}a_i\oplus a_j i=1∑l​j=1∑i−1​ai​⊕aj​
最大,问最大值为多少

浅浅谈一下?

  • 首先,我们肯定从那个式子入手,我们可以发现∑i=1l∑j=1i−1\sum_{i=1}^l\sum_{j=1}^{i-1}∑i=1l​∑j=1i−1​这个东西,就是让一个数组里的每两个元素一一异或
  • 于是,问题就转变成了你需要构造一个aaa数组,里面的每两个元素一一异或的值加起来最大
  • 我们继续转化,发现异或就是把每个数变成二进制,进行运算的,所以我们就可以想象有一堆二进制数,他们现在要一一异或
  • 我们来认识一下异或:⊕\oplus⊕
  • 运算规则
  • 只要不一样就是111,不一样就是000
  • 例子:01(2)⊕11(2)=10(2)01_{(2)} \oplus 11_{(2)}=10_{(2)}01(2)​⊕11(2)​=10(2)​
  • 发现了什么?
  • 只有两边各有一个000或111这一位才为111
  • 我们再来认识一下位值
  • 假设有一个101(2)101_{(2)}101(2)​,它的十进制是什么?
  • 是不是4+1=54+1=54+1=5?所以第三位111它的值就是23−1=42^{3-1}=423−1=4
  • 我们归纳一下,如果一个二进制数,它的第kkk位是1,那么那一位贡献的值就是2k−12^{k-1}2k−1
  • 好啦,以上就是前置芝士

回到本题

  • 既然我们吧那个式子转换成一堆二进制一一异或,我们就可以每一位每一位的看
  • 假如现在有lll个二进制数,我们单独看看第kkk位
  • 假设第kkk位有xxx个000.那么第kkk位就有l−xl-xl−x个111
  • 现在我们要看看这一堆000和111对原式有什么贡献
  • 根据前置芝士,只有一个000和一个111才能有一个111
  • 所以第111个000可以和其他l−xl-xl−x个111一一异或成为l−xl-xl−x个111
  • 同理,第222个,第333个……都可以产生l−xl-xl−x个111
  • 所以共可以产生x⋅(l−x)x\cdot (l-x)x⋅(l−x)个111,而第kkk个111贡献的值为2k−12^{k-1}2k−1,所以总共贡献的值为
  • 2k−1⋅x⋅(l−x)2^{k-1}\cdot x \cdot (l-x)2k−1⋅x⋅(l−x)
  • 所以,如果我们设ppp为nnn的二进制位数的话
    ∑i=1l∑j=1i−1ai⊕aj=∑i=1p2i−1⋅x⋅(l−x)\sum_{i=1}^l\sum_{j=1}^{i-1}a_i\oplus a_j=\sum_{i=1}^p2^{i-1}\cdot x \cdot (l-x) i=1∑l​j=1∑i−1​ai​⊕aj​=i=1∑p​2i−1⋅x⋅(l−x)
  • 要使那个式子最大,首先要使2i−1⋅x⋅(l−x)2^{i-1}\cdot x \cdot (l-x)2i−1⋅x⋅(l−x)这个最大
  • 我们发现2i−12^{i-1}2i−1是常数,不看他,也就是要x⋅(l−x)x\cdot (l-x)x⋅(l−x)最大
  • 假如你学过二次函数
    x⋅(l−x)=−x2+lxx\cdot (l-x)=-x^2+lx x⋅(l−x)=−x2+lx
  • 该二次函数开口向下,有最大值
  • 也就是当x=−b2a=−l−2=l2x=-\frac{b}{2a}=\frac{-l}{-2}=\frac{l}{2}x=−2ab​=−2−l​=2l​时取最大值
  • 这里要纠正一下,因为只有可能是整数,所以我们这里向下取整一下(和向上取整没区别)
  • 原式就等于⌊l2⌋⋅(l−⌊l2⌋)\left \lfloor \frac{l}{2}\right \rfloor\cdot (l-\left \lfloor \frac{l}{2}\right \rfloor)⌊2l​⌋⋅(l−⌊2l​⌋)
  • 于是我们就可以得到一个式子(注意,∑\sum∑具有结合律)
    ∑i=1p2i−1⋅⌊l2⌋⋅(l−⌊l2⌋)=⌊l2⌋⋅(l−⌊l2⌋)⋅∑i=1p2i−1\begin{aligned} &\sum_{i=1}^p2^{i-1}\cdot\left \lfloor \frac{l}{2}\right \rfloor\cdot (l-\left \lfloor \frac{l}{2}\right \rfloor)\\ =&\left \lfloor \frac{l}{2}\right \rfloor\cdot (l-\left \lfloor \frac{l}{2}\right \rfloor)\cdot\sum_{i=1}^p2^{i-1} \end{aligned} =​i=1∑p​2i−1⋅⌊2l​⌋⋅(l−⌊2l​⌋)⌊2l​⌋⋅(l−⌊2l​⌋)⋅i=1∑p​2i−1​
  • 对于∑i=1p2i−1\sum_{i=1}^p2^{i-1}∑i=1p​2i−1我们可以用等比数列的求和公式,它就变成了2p−12^p-12p−1
  • 所以我们要求的就是
    ⌊l2⌋⋅(l−⌊l2⌋)⋅2p−1\left \lfloor \frac{l}{2}\right \rfloor\cdot (l-\left \lfloor \frac{l}{2}\right \rfloor)\cdot2^{p}-1 ⌊2l​⌋⋅(l−⌊2l​⌋)⋅2p−1
  • 最后一个问题:ppp是什么?
  • 我们立刻就会想到与log⁡n\log nlogn有关系,我们来手摸一下
  • 如果是8=1000(2)8=1000_{(2)}8=1000(2)​,log⁡8=3\log 8=3log8=3,位数是444,所以我们要加一
  • 再来一个7=11127=111_{2}7=1112​,log⁡7=2....\log 7 = 2....log7=2....,位数是333,所以我们要向下取整在加一
  • 归纳一下
    p=⌊log⁡n⌋+1p= \left \lfloor \log n\right \rfloor + 1 p=⌊logn⌋+1
  • 于是代码就出来了

Code\mathcal{Code}Code

#include<bits/stdc++.h>using namespace std;
#define int unsigned long long
const int MAXN = 5e5 + 7, mod = 1e9 + 7;int T, n, l;signed main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> T;while (T--) {cin >> n >> l;if (n == 1) cout << 0 << endl;else cout << ((l / 2 * (l - l / 2)) % mod * ((int)pow(2, (int)log2(n) + 1) - 1)) % mod << endl;}return kkksc03;
}

完结撒花✿✿ヽ(°▽°)ノ✿

洛谷P6599 「EZEC-2」异或【题解】相关推荐

  1. 洛谷 P3373 【模板】线段树 2 题解

    洛谷 P3373 [模板]线段树 2 题解 题面 题目链接:[戳这里](https://www.luogu.org/problemnew/show/P3373) 题目描述 输入输出格式 输入输出样例 ...

  2. 洛谷P2738 [USACO4.1]篱笆回路Fence Loops 题解

    洛谷P2738 [USACO4.1]篱笆回路Fence Loops 题解 题目链接:P2738 [USACO4.1]篱笆回路Fence Loops 题意:农夫布朗的牧场上的篱笆已经失去控制了.它们分成 ...

  3. 洛谷P3131 [USACO16JAN]Subsequences Summing to Sevens S 题解

    洛谷P3131 [USACO16JAN]Subsequences Summing to Sevens S 题解 题目链接:P3131 [USACO16JAN]Subsequences Summing ...

  4. 洛谷试炼场 P1553 数字反转(升级版)题解

    洛谷试炼场 P1553 数字反转(升级版)题解 [c] 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数. ...

  5. LOJ6435 洛谷5465 「PKUSC2018」星际穿越 倍增

    题目链接: loj6435 洛谷5465 蒟蒻zyd:这不是大水题吗?看我写个O(nlog2n)O(nlog^2n)O(nlog2n)的诡异ST表卡卡常数跑过去 题目:输出区间距离和 蒟蒻zyd:(笑 ...

  6. 洛谷月赛T2 P6858[深海少女与胖头鱼]题解

    目录 题面 前置知识 数学期望 快速幂 逆元 题解 分析 AC Code 题面 洛谷十月月赛II T2 深海少女与胖头鱼 总共有 nnn 条带 「圣盾」的「胖头鱼」和 mmm 条不带圣盾的胖头鱼,每次 ...

  7. 【LGR-142-Div.4】洛谷入门赛 #13 考后分析与题解

    洛谷入门赛 #Round 13 比赛分析与总结 T1 魔方 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 数据规模与约定 分析 AC代码 注意 T2 教学楼 ...

  8. 【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记

    洛谷平台题单100链接:https://www.luogu.com.cn/training/100#problems 目录 学习笔记: P1001 A+B Problem P1000 超级玛丽游戏 P ...

  9. 【洛谷OJ C++】洛谷题单101 入门2分支结构 题解及学习笔记

    洛谷题单101链接:https://www.luogu.com.cn/training/101#problems 笔记及题解目录: 学习笔记: P5710 [深基3.例2]数的性质 P5711 [深基 ...

最新文章

  1. 108.什么是信道?109.信道分类 110.什么是模拟信号?什么是数字信号?
  2. 文巾解题 8. 字符串转换整数 (atoi)
  3. 微信小程序入门三: 简易form、本地存储
  4. 日志log4cxx 封装、实例讲解、配置文件log4cxx.properties
  5. 如何用python打印田字格_如何用 3D 打印一双顶级跑鞋回形针
  6. 为什么我喜欢写即时通讯软件呢?
  7. 使用强大的 Mockito 来测试你的代码
  8. jQuery复制table header到表格的最下面
  9. 你真的会用ABAP, Java和JavaScript里的constructor么? 1
  10. vss2005版本库迁移
  11. 灵格斯与众多常用软件的冲突问题
  12. Oracle中nlssort 中文 排序 用法
  13. 网卡 eth0,eth1,eth2,lo分别代表是什么 意思
  14. RuoYi-Vue——图标使用
  15. python计算gpa,Python版GPA计算器
  16. 腾讯云服务器域名申请 备案和绑定IP地址详细步骤带清晰图
  17. 拼字游戏 html5,拼字游戏攻略
  18. 毕业一年有感——人活着的意义是什么?
  19. 2021年N1叉车司机考试APP及N1叉车司机新版试题
  20. Eclipse 从SVN检出项目之《文件夹 “” 已不存在 》

热门文章

  1. 温馨浪漫HTML表白爱情源码大气简洁单页源码(html生日快乐网站制作)
  2. 西门子运动控制卡使用详解
  3. IC验证培训——SV通用库共享
  4. LWN:Linux Mint 20.2 中的变化!
  5. cve20190708补丁的kb名称_cve漏洞扫描工具下载|
  6. 利用定向网络爬虫爬取豆瓣电影top250【Python】
  7. android 后台程序 设置 优先级,Android应用程序防止被LMK干掉
  8. 在UE4中实现虚函数
  9. android智能机顶盒测试,跑分过万 智能android机顶盒MINIX X5测试
  10. ServerBoss:国产免费的Linux连接工具,服务器管理工具