洛谷P6599 「EZEC-2」异或【题解】
题目大意
有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∑lj=1∑i−1ai⊕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∑lj=1∑i−1ai⊕aj=i=1∑p2i−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∑p2i−1⋅⌊2l⌋⋅(l−⌊2l⌋)⌊2l⌋⋅(l−⌊2l⌋)⋅i=1∑p2i−1 - 对于∑i=1p2i−1\sum_{i=1}^p2^{i-1}∑i=1p2i−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是什么?
- 我们立刻就会想到与logn\log nlogn有关系,我们来手摸一下
- 如果是8=1000(2)8=1000_{(2)}8=1000(2),log8=3\log 8=3log8=3,位数是444,所以我们要加一
- 再来一个7=11127=111_{2}7=1112,log7=2....\log 7 = 2....log7=2....,位数是333,所以我们要向下取整在加一
- 归纳一下
p=⌊logn⌋+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」异或【题解】相关推荐
- 洛谷 P3373 【模板】线段树 2 题解
洛谷 P3373 [模板]线段树 2 题解 题面 题目链接:[戳这里](https://www.luogu.org/problemnew/show/P3373) 题目描述 输入输出格式 输入输出样例 ...
- 洛谷P2738 [USACO4.1]篱笆回路Fence Loops 题解
洛谷P2738 [USACO4.1]篱笆回路Fence Loops 题解 题目链接:P2738 [USACO4.1]篱笆回路Fence Loops 题意:农夫布朗的牧场上的篱笆已经失去控制了.它们分成 ...
- 洛谷P3131 [USACO16JAN]Subsequences Summing to Sevens S 题解
洛谷P3131 [USACO16JAN]Subsequences Summing to Sevens S 题解 题目链接:P3131 [USACO16JAN]Subsequences Summing ...
- 洛谷试炼场 P1553 数字反转(升级版)题解
洛谷试炼场 P1553 数字反转(升级版)题解 [c] 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数. ...
- LOJ6435 洛谷5465 「PKUSC2018」星际穿越 倍增
题目链接: loj6435 洛谷5465 蒟蒻zyd:这不是大水题吗?看我写个O(nlog2n)O(nlog^2n)O(nlog2n)的诡异ST表卡卡常数跑过去 题目:输出区间距离和 蒟蒻zyd:(笑 ...
- 洛谷月赛T2 P6858[深海少女与胖头鱼]题解
目录 题面 前置知识 数学期望 快速幂 逆元 题解 分析 AC Code 题面 洛谷十月月赛II T2 深海少女与胖头鱼 总共有 nnn 条带 「圣盾」的「胖头鱼」和 mmm 条不带圣盾的胖头鱼,每次 ...
- 【LGR-142-Div.4】洛谷入门赛 #13 考后分析与题解
洛谷入门赛 #Round 13 比赛分析与总结 T1 魔方 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 数据规模与约定 分析 AC代码 注意 T2 教学楼 ...
- 【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记
洛谷平台题单100链接:https://www.luogu.com.cn/training/100#problems 目录 学习笔记: P1001 A+B Problem P1000 超级玛丽游戏 P ...
- 【洛谷OJ C++】洛谷题单101 入门2分支结构 题解及学习笔记
洛谷题单101链接:https://www.luogu.com.cn/training/101#problems 笔记及题解目录: 学习笔记: P5710 [深基3.例2]数的性质 P5711 [深基 ...
最新文章
- 108.什么是信道?109.信道分类 110.什么是模拟信号?什么是数字信号?
- 文巾解题 8. 字符串转换整数 (atoi)
- 微信小程序入门三: 简易form、本地存储
- 日志log4cxx 封装、实例讲解、配置文件log4cxx.properties
- 如何用python打印田字格_如何用 3D 打印一双顶级跑鞋回形针
- 为什么我喜欢写即时通讯软件呢?
- 使用强大的 Mockito 来测试你的代码
- jQuery复制table header到表格的最下面
- 你真的会用ABAP, Java和JavaScript里的constructor么? 1
- vss2005版本库迁移
- 灵格斯与众多常用软件的冲突问题
- Oracle中nlssort 中文 排序 用法
- 网卡 eth0,eth1,eth2,lo分别代表是什么 意思
- RuoYi-Vue——图标使用
- python计算gpa,Python版GPA计算器
- 腾讯云服务器域名申请 备案和绑定IP地址详细步骤带清晰图
- 拼字游戏 html5,拼字游戏攻略
- 毕业一年有感——人活着的意义是什么?
- 2021年N1叉车司机考试APP及N1叉车司机新版试题
- Eclipse 从SVN检出项目之《文件夹 “” 已不存在 》
热门文章
- 温馨浪漫HTML表白爱情源码大气简洁单页源码(html生日快乐网站制作)
- 西门子运动控制卡使用详解
- IC验证培训——SV通用库共享
- LWN:Linux Mint 20.2 中的变化!
- cve20190708补丁的kb名称_cve漏洞扫描工具下载|
- 利用定向网络爬虫爬取豆瓣电影top250【Python】
- android 后台程序 设置 优先级,Android应用程序防止被LMK干掉
- 在UE4中实现虚函数
- android智能机顶盒测试,跑分过万 智能android机顶盒MINIX X5测试
- ServerBoss:国产免费的Linux连接工具,服务器管理工具