首页 > 其他分享 >[刷题笔记] 异或

[刷题笔记] 异或

时间:2023-07-18 22:13:37浏览次数:51  
标签:10 xor 笔记 leq 异或 ans operatorname 刷题

Problem

给定一个包含 \(n\) 个数的可重集,每个数为 0 或 1 ,初始时答案变量 \(ans=0\) 。
你需要进行 \(n-1\) 次操作,每次操作进行如下:

  1. 选取可重集中的两个数 \(x,y\) ,并计算出 \(z=x \operatorname{xor} y\) 。
  2. 将 \(ans\) 增加 \(z\) 。
  3. 在可重集中删除 \(x,y\) ,并加入 \(z\) 。

显然,最终可重集只会剩下一个数。

请求出操作结束后能够获得的最大的 \(ans\) 值为多少。

解释:\(\operatorname{xor}\) 表示异或,在 C++ 中运算符为 ^,异或结果的二进制某一位为 1 当且仅当参与运算的两个数在这位不同。(\(0\operatorname{xor}0=1\operatorname{xor}1=0,\ \ 0\operatorname{xor}1=1\operatorname{xor}0=1\))
对于 \(10\%\) 的数据,\(n=2\) 。

对于 \(30\%\) 的数据,\(n\leq 10\) 。

对于 \(50\%\) 的数据,\(n\leq 300\) 。

对于 \(70\%\) 的数据,\(n\leq 10^6\) 。

对于 \(100\%\) 的数据,\(T\leq 10,2\leq n\leq 10^{18}\) 。

Description

题目描述非常明了,不做说明。

Solution

一看数据1e18。结论题。

我们发现,只是给定了0和1的个数,并没有告诉你具体序列如何,考虑构造。

那么如何构造使得 \(ans\)最大呢?

首先特判如果没有1则无论如何构造都不可能出现1,输出0即可。

接下来显然需要尽可能的使0和1配对,因为0&1=1。设有\(k\)个0,\(k\)个1,那么这样的构造显然能凑出\(k\)对01,也就是会给ans贡献\(k\)
为什么一定能凑出\(k\)对01呢?若1的数量少于0的数量怎么办!

举个例子:
0001
我们合并01,变成1,然后继续合并01......显然由于\(0 xor 1 = 1\),哪怕1的数量少于0也可以凑出。

对于这样的构造我们会消去所有的0,原来有多少1现在还有多少1。

接下来考虑如何抵消1。

最后消完会剩下一个1,剩下的都变成0即可,因此一共会给答案贡献\((k-1)/2\)

还有,记得开long long

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std;
ll T;
int main()
{
	scanf("%lld",&T); 
	while(T--)
	{
		ll a,b;
		scanf("%lld%lld",&a,&b);
		if(b == 0) cout<<"0"<<endl;
		else cout<<a+(b-1)/2<<endl;	
	}	
	return 0;
} 

标签:10,xor,笔记,leq,异或,ans,operatorname,刷题
From: https://www.cnblogs.com/SXqwq/p/17558716.html

相关文章

  • 动手学深度学习-笔记
    课程信息课程主页Pytorch版视频教程目录03安装04数据操作+数据预处理05线性代数06矩阵计算07自动求导08线性回归+基础优化算法分集笔记06矩阵计算07自动求导08线性回归+基础优化算法%matplotlib_inline不能在pychrom里运行,在代码最后一行加上plt.s......
  • 《DeepChain: Auditable and Privacy-Preserving Deep Learning with Blockchain-base
    本文的研究背景:在各种机器学习任务中,深度学习可以实现比传统机器学习算法更高的精度。最近,保护隐私的深度学习引起了信息安全界的极大关注,其中训练数据和训练模型都不会被暴露。联合学习是一种流行的学习机制,其中多方将局部梯度上传到服务器,服务器使用收集的梯度更新模型参数。然......
  • 分块学习笔记
    分块学习笔记区间加:对于每个区间\([l,r]\),如果\(lid=rid\),那么就暴力加。否则中间块加到\(sum[i]\)和\(tag[i]\)内,其余散块暴力加到\(a[i]\)内。注意不会存在最后一个块长不为\(len\)的情况,因为\(rid-1\)总是不会在最后一个块内。区间和:对于每个区间\([l,r]\),如......
  • Learning hard C#学习笔记——读书笔记 04
    1.什么是接口接口可以认为是一种规范,它是一种类的构建规范,它里面定义了一系列的方法和类型,但是没有具体的实现,需要继承它的类去自我实现2.接口的定义使用VS2022在解决方案管理器这里,添加新建项在添加新建项模板这里,选择接口最后创建出来的接口如下usingSystem;......
  • Learning hard C#学习笔记——读书笔记 05
    1.什么是IL语言我们开篇介绍C#的时候,就介绍了C#的编译过程,C#会通过编译器先编译成IL语言(IntermediateLanguage),IL代码会存放在一个程序集中IL(IntermediateLanguage),它称为CIL或者MSIL,IL是由ECMA组织(也就是定义JS标准的那个组织),提供完整的定义和规范。使用VisualStudio......
  • 网络流学习笔记
    网络流1.关于网络的一些定义:(1)网络:网络(又称流网络\(Flow\Network\))是指一个有向图\(\G=(V,E)\)。每条边\((u,v)\inE\)都有个权值\(c(u,v)\),称之为容量\((Capacity)\),\(\forall(u,v)\notinE,c(u,v)=0\).其中有两个特殊点:分别是源点\((Source)s\inV\)和汇点\((Sink......
  • 【组合数学】康托展开 学习笔记
    康托展开将\(1...n\)的所有排列按照字典序进行排序,某个排列的排名可以通过康托展开的方法求出。原理观察排列\(2,3,1,4\)和\(2,3,4,1\),发现第一个不同的位置是第三位,而且第一个排列的第三位比第二个小,根据字典序的性质,第一个排列的排名在第二个之前。从这里我们也可以发......
  • jfinal 框架学习笔记-第四天 view的相应学习
    一.view页面的一次指令运用  页面上的一些语法:   二。另一种view显示<hr><hr><hr>#set(x=123)#(x)<hr><hr><hr>效果如下: 整体代码: 三。引用页面 ......
  • 零基础入门——从零开始学习PHP反序列化笔记(二)
    魔术方法魔术方法介绍__construct()触发时机:实例化对象之前构造函数,在实例化一个对象的时候,首先会去自动执行的一个方法;<?phpclassUser{public$username;publicfunction__construct($username){$this->username=$username;echo"......
  • jfinal 框架学习笔记-第三天 Model相关学习--record+Model增删改查的用法(震惊之今日刷
    1.了解了数据库连接池。其中使用最多也是最广泛的是druid数据库连接池也就是阿里云研发的数据库连接池2.ActiveRecord(jFinal的核心技术)+DruidPlugin(数据库连接词,如何与数据库打交道)ActiveRecord:1.Record(记录,相当于一个通用的Model),2.Model(提供日常CRUD的封装)Model示例......