洛谷P6599 「EZEC-2」异或【题解】
题目大意
有\(T\)组数据,每组数据给定两个\(l,n\in\mathbb{N*}\),构造一个长为\(l\),每个元素不超过\(n\)的数组
令他为\(a\),要使
\]
最大,问最大值为多少
浅浅谈一下?
- 首先,我们肯定从那个式子入手,我们可以发现\(\sum_{i=1}^l\sum_{j=1}^{i-1}\)这个东西,就是让一个数组里的每两个元素一一异或 
- 于是,问题就转变成了你需要构造一个\(a\)数组,里面的每两个元素一一异或的值加起来最大 
- 我们继续转化,发现异或就是把每个数变成二进制,进行运算的,所以我们就可以想象有一堆二进制数,他们现在要一一异或 
- 我们来认识一下异或:\(\oplus\) 
- 运算规则 
- 只要不一样就是\(1\),不一样就是\(0\) 
- 例子:\(01_{(2)} \oplus 11_{(2)}=10_{(2)}\) 
- 发现了什么? 
- 只有两边各有一个\(0\)或\(1\)这一位才为\(1\) 
- 我们再来认识一下位值 
- 假设有一个\(101_{(2)}\),它的十进制是什么? 
- 是不是\(4+1=5\)?所以第三位\(1\)它的值就是\(2^{3-1}=4\) 
- 我们归纳一下,如果一个二进制数,它的第\(k\)位是1,那么那一位贡献的值就是\(2^{k-1}\) 
- 好啦,以上就是前置芝士 
回到本题
- 既然我们吧那个式子转换成一堆二进制一一异或,我们就可以每一位每一位的看 
- 假如现在有\(l\)个二进制数,我们单独看看第\(k\)位 
- 假设第\(k\)位有\(x\)个\(0\).那么第\(k\)位就有\(l-x\)个\(1\) 
- 现在我们要看看这一堆\(0\)和\(1\)对原式有什么贡献 
- 根据前置芝士,只有一个\(0\)和一个\(1\)才能有一个\(1\) 
- 所以第\(1\)个\(0\)可以和其他\(l-x\)个\(1\)一一异或成为\(l-x\)个\(1\) 
- 同理,第\(2\)个,第\(3\)个……都可以产生\(l-x\)个\(1\) 
- 所以共可以产生\(x\cdot (l-x)\)个\(1\),而第\(k\)个\(1\)贡献的值为\(2^{k-1}\),所以总共贡献的值为 
- \(2^{k-1}\cdot x \cdot (l-x)\) 
- 所以,如果我们设\(p\)为\(n\)的二进制位数的话 
\]
- 要使那个式子最大,首先要使\(2^{i-1}\cdot x \cdot (l-x)\)这个最大 
- 我们发现\(2^{i-1}\)是常数,不看他,也就是要\(x\cdot (l-x)\)最大 
- 假如你学过二次函数 
\]
- 该二次函数开口向下,有最大值 
- 也就是当\(x=-\frac{b}{2a}=\frac{-l}{-2}=\frac{l}{2}\)时取最大值 
- 这里要纠正一下,因为只有可能是整数,所以我们这里向下取整一下(和向上取整没区别) 
- 原式就等于\(\left \lfloor \frac{l}{2}\right \rfloor\cdot (l-\left \lfloor \frac{l}{2}\right \rfloor)\) 
- 于是我们就可以得到一个式子(注意,\(\sum\)具有结合律) 
\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}
\]
- 对于\(\sum_{i=1}^p2^{i-1}\)我们可以用等比数列的求和公式,它就变成了\(2^p-1\)
- 所以我们要求的就是
\]
- 最后一个问题:\(p\)是什么?
- 我们立刻就会想到与\(\log n\)有关系,我们来手摸一下
- 如果是\(8=1000_{(2)}\),\(\log 8=3\),位数是\(4\),所以我们要加一
- 再来一个\(7=111_{2}\),\(\log 7 = 2....\),位数是\(3\),所以我们要向下取整在加一
- 归纳一下
\]
- 于是代码就出来了
\(\mathcal{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」异或【题解】的更多相关文章
- 洛谷比赛 「EZEC」 Round 4
		洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ... 
- [洛谷P3701]「伪模板」主席树
		题目大意:太暴力了,就不写了,看这儿 题解:对于每个$byx$的人,从源点向人连边,容量为此人的寿命. 对于每个手气君的人,从人向汇点连边,容量为此人的寿命. 对于每个$byx$的人与手气君的人,如果 ... 
- LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
		题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ... 
- LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠
		题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ... 
- 洛谷 P4710 「物理」平抛运动
		洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ... 
- 题解-洛谷P6788 「EZEC-3」四月樱花
		题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ... 
- 【洛谷P3369】【模板】普通平衡树题解
		[洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ... 
- 洛谷 P1992 不想兜圈的老爷爷 题解
		洛谷 P1992 不想兜圈的老爷爷 题解 题目描述 一位年过古稀的老爷爷在乡间行走 而他不想兜圈子 因为那会使他昏沉 偶然路过小A发扬助人为乐优良传统 带上地图 想知道路况是否一定使他清醒 usqwe ... 
- LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想
		题目:https://loj.ac/problem/2473 https://www.luogu.org/problemnew/show/P4365 参考:https://blog.csdn.net/ ... 
随机推荐
- servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
			文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ... 
- 齐博x1如果把万能表单直接插入到内容中去
			很多时候,你创建了一个万能表单可能像下面这个情况,在文章中加一个链接叫别人点击填表,其实这个很不人性化,用户也容易忽略. 其实你完全可以像下面这样,把表单直接引用到文章中来.给用户更直观的感觉 那是如 ... 
- Springboot实现验证码登录
			Springboot实现验证码登录 1.背景 本人近期正在完成毕业设计(旅游信息管理系统)的制作,采用的SpringBoot+Thymeleaf的模式.在登录网站时想要添加验证码验证,通过网上查找资料 ... 
- SpringBoot 08: SpringBoot综合使用 MyBatis, Dubbo, Redis
			业务背景 Student表 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COL ... 
- 2022-11-06 Acwing每日一题
			本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ... 
- Leetcode 799.香槟塔:动态规划+递归
			香槟塔:动态规划+递归 题目来源:Leetcode 22/11/20每日一题:799.香槟塔 https://leetcode.cn/problems/champagne-tower 我们把玻璃杯摆成 ... 
- i春秋Test
			点开是个莫名其妙的网站...看看源码, 第一排好像有点东西 最后也有点东西,所以我们直接百度海洋CMS漏洞(https://www.freebuf.com/vuls/150042.html) 所以这里 ... 
- 快捷打开cmd管理员模式
			win+s-搜索cmd 直接回车:普通用户模式的cmd CTRL+SHIFT+回车:管理员模式的cmd 
- 关于linux上实现arp攻击截取密码
			前言 这几天简单的研究了一下arp攻击,有一些进展,记录一下 环境准备 这里我是利用arpspoof 这个软件简单实现arp攻击,这个命令是属于dsniff 软件包中的 所以首先安装软件 sudo a ... 
- Day29 派生, 封装 , 多态, 反射
			Day29 派生, 封装 , 多态, 反射 内容概要 派生方法的实践 面向对象之封装 面向对象之多态 面向对象之反射 反射的实践案例 内容详细 1.派生方法的实践 #需求展示 import json ... 
