题意:给定n个数,让你给出一个数,使得n个数与给出的数异或后得到的数的二进制表示中1的数量相同

题解:考虑暴搜2^30去找答案,显然不可接受

显然可以发现,这是一个经典的meet in the middle模型,直接套用然后hash一下即可

设前15位异或完之后1的个数为ai,那么差分一下得

a1  a2-a1  a3-a2  a4-a3  ......

设后15位异或之后1的个数为bi,那么查分一下得

b1  b2-b1  b3-b2  b4-b3  ......

差分完之后表示的是后一个数1的个数与前一个数的区别,当所有的ai-ai-1+bi-bi-1都为0时,则表示后一个数和前一个数的1的个数相同

即a2-a1=-(b2-b1)

所以只要将后15位得到的bi数组取相反数即可

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<map>
#define ll long long
#define mod 145141247483647
using namespace std;
int bit[],a[],b[];
int n;
map<ll,int> fl;
map<ll,int>::iterator I;
const int T=(<<)-;
int main()
{
for(int i=;i<=;i++)bit[i]=bit[i>>]+(i&);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=;i++)
{
for(int j=;j<=n;j++)b[j]=(a[j]>>)^i;
for(int j=n;j>;j--)b[j]=bit[b[j]]-bit[b[j-]]+;
ll t=;
for(int j=;j<=n;j++)t=(t*+b[j]+mod)%mod;
fl[t]=i;
}
for(int i=;i<=;i++)
{
for(int j=;j<=n;j++)b[j]=(a[j]&T)^i;
for(int j=n;j>;j--)b[j]=-bit[b[j]]+bit[b[j-]]+;
ll t=;
for(int j=;j<=n;j++)t=(t*+b[j]+mod)%mod;
I=fl.find(t);
if(I!=fl.end())
{
return !printf("%d\n",((*I).second<<)+i);
}
}
return !printf("-1");
}

【CF1257F】Make Them Similar【meet in the middle+hash】的更多相关文章

  1. 【BZOJ4800】[Ceoi2015]Ice Hockey World Championship (meet in the middle)

    [BZOJ4800][Ceoi2015]Ice Hockey World Championship (meet in the middle) 题面 BZOJ 洛谷 题解 裸题吧,顺手写一下... #i ...

  2. 【CF888E】Maximum Subsequence(meet in the middle)

    [CF888E]Maximum Subsequence(meet in the middle) 题面 CF 洛谷 题解 把所有数分一下,然后\(meet\ in\ the\ middle\)做就好了. ...

  3. 【CF912E】Prime Game(meet in the middle)

    [CF912E]Prime Game(meet in the middle) 题面 CF 懒得翻译了. 题解 一眼题. \(meet\ in\ the\ middle\)分别爆算所有可行的两组质数,然 ...

  4. 【BZOJ4800】[Ceoi2015]Ice Hockey World Championship Meet in the Middle

    [BZOJ4800][Ceoi2015]Ice Hockey World Championship Description 有n个物品,m块钱,给定每个物品的价格,求买物品的方案数. Input 第一 ...

  5. 【线性代数】6-6:相似矩阵(Similar Matrices)

    title: [线性代数]6-6:相似矩阵(Similar Matrices) categories: Mathematic Linear Algebra keywords: Similar Matr ...

  6. 【小白的CFD之旅】13 敲门实例【续3】

    接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ...

  7. 【转】iOS静态库 【.a 和framework】【超详细】

    原文网址:https://my.oschina.net/kaqijiang/blog/649632 一.什么是库? 库是共享程序代码的方式. 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存 ...

  8. 【Xamarin挖墙脚系列:IOS-关于手机支持的屏幕方向】

    原文:[Xamarin挖墙脚系列:IOS-关于手机支持的屏幕方向] 设置支持的屏幕方向有两个级别,一个是app级别的,另一个是viewController级别的. app 级别的可以在[target] ...

  9. 【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】

    原文:[Xamarin 挖墙脚系列:IOS 开发界面的3种方式] xcode6进行三种基本的界面布局的方法,分别是手写UI,xib和storyboard.手写UI是最早进行UI界面布局的方法,优点是灵 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_5_迭代器的代码实现

    迭代器的类型和collection一样.都是String类型的 判断集合内是不是有元素 取出第一个元素 多次next获取所有的值 没有元素,再去取就会抛出异常. 适应while for循环的格式了解一 ...

  2. C#实体类生成Create Table SQL

    using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespac ...

  3. Mac基本配置

    相关操作 配置文件 java 下载jdk-12.0.1_osx-x64_bin.dmg 配置环境变量 #配置java JAVA_HOME=/Library/Java/JavaVirtualMachin ...

  4. ecshop注册用户增加手机验证功能

    1.去掉“用户名”注册 a.去掉提交 user_passport.dwt页面去掉 <input name="username" type="text" s ...

  5. VC调试方法大全

    VC调试方法大全 一.调试基础 调试快捷键 F5:  开始调试 Shift+F5: 停止调试 F10:   调试到下一句,这里是单步跟踪 F11:   调试到下一句,跟进函数内部 Shift+F11: ...

  6. window.onload后跟函数 和跟函数名的区别【window.onload = asd() 和 window.onload = asd 】

    window.onload:页面加载完毕执行[DOM tree + 外部图片 + 资源] <script> function asd(){ return 10; } window.onlo ...

  7. TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...

  8. Js中className的用法

    className可以用来改变标签元素的css类选择器,从而改变元素的样式 举个栗子 一个简单的无序列表,点击button之前ul的样式为uhh1 点击button后,调用check函数中的class ...

  9. linux中的一些常用命令

    shutdown -h now 现在马上关机 shutdown -r now 现在重新启动 reboot 现在重新启动 su - 如果当前是普通用户,则输入这条命令切换到管理员用户(root),如果要 ...

  10. MVC加深理解

    MVC MVC约定:Controllers文件夹 对应 Views文件夹:所有子文件的名称一一对应. 页面请求 -> 路由 -> 找到 controller/action -> re ...