【CF1257F】Make Them Similar【meet in the middle+hash】


题意:给定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】的更多相关文章
- 【BZOJ4800】[Ceoi2015]Ice Hockey World Championship (meet in the middle)
[BZOJ4800][Ceoi2015]Ice Hockey World Championship (meet in the middle) 题面 BZOJ 洛谷 题解 裸题吧,顺手写一下... #i ...
- 【CF888E】Maximum Subsequence(meet in the middle)
[CF888E]Maximum Subsequence(meet in the middle) 题面 CF 洛谷 题解 把所有数分一下,然后\(meet\ in\ the\ middle\)做就好了. ...
- 【CF912E】Prime Game(meet in the middle)
[CF912E]Prime Game(meet in the middle) 题面 CF 懒得翻译了. 题解 一眼题. \(meet\ in\ the\ middle\)分别爆算所有可行的两组质数,然 ...
- 【BZOJ4800】[Ceoi2015]Ice Hockey World Championship Meet in the Middle
[BZOJ4800][Ceoi2015]Ice Hockey World Championship Description 有n个物品,m块钱,给定每个物品的价格,求买物品的方案数. Input 第一 ...
- 【线性代数】6-6:相似矩阵(Similar Matrices)
title: [线性代数]6-6:相似矩阵(Similar Matrices) categories: Mathematic Linear Algebra keywords: Similar Matr ...
- 【小白的CFD之旅】13 敲门实例【续3】
接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ...
- 【转】iOS静态库 【.a 和framework】【超详细】
原文网址:https://my.oschina.net/kaqijiang/blog/649632 一.什么是库? 库是共享程序代码的方式. 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存 ...
- 【Xamarin挖墙脚系列:IOS-关于手机支持的屏幕方向】
原文:[Xamarin挖墙脚系列:IOS-关于手机支持的屏幕方向] 设置支持的屏幕方向有两个级别,一个是app级别的,另一个是viewController级别的. app 级别的可以在[target] ...
- 【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】
原文:[Xamarin 挖墙脚系列:IOS 开发界面的3种方式] xcode6进行三种基本的界面布局的方法,分别是手写UI,xib和storyboard.手写UI是最早进行UI界面布局的方法,优点是灵 ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_1_并发与并行
并发,相当于 一个人吃两个馒头,吃一口这个再吃一口另外一个.这里是cpu一会执行任务1,一会又执行任务2 并行,相当于两个人 吃两个馒头,各自吃各自的,这样速度就会快
- mysql数据库连接 application.properties
# 数据库链接信息mysql.driver=com.mysql.cj.jdbc.Drivermysql.url=jdbc:mysql://localhost:3306/xxxx?characterEn ...
- TensorFlow学习笔记7-深度前馈网络(多层感知机)
深度前馈网络(前馈神经网络,多层感知机) 神经网络基本概念 前馈神经网络在模型输出和模型本身之间没有反馈连接;前馈神经网络包含反馈连接时,称为循环神经网络. 前馈神经网络用有向无环图表示. 设三个函数 ...
- little-endian And big-endian
coming from http://zhidao.baidu.com/link?url=B_7AA_O6TkCVlKw9t_Xifu6TzpaFUiDEVkH1iTRT4vUGD0uRmazwduf ...
- [Python3] 009 字符串:给你们看看我的内置方法 第一弹
目录 前言 如何查看 python3 中和 str 有关的方法 字符串方法 1. capitalize() 2. casefold() 3. center(width) 4. count(sub[, ...
- 【sql server复制】不重新初始化快照的情况下新增表/存储过程/函数等
转发自:https://www.cnblogs.com/datazhang/p/5498789.html sqlserver同步后在不重新初始化快照的情况下新增表 在已有事务复制中,时长 ...
- Ant-编译构建(2)-第3方jar包引入、log4j2
1.项目目录结构图,lib包引入了一些关于common logging+log4j2相关的jar. 2.编写相关的build.xml <?xml version="1.0" ...
- Atlantis poj1151 线段树扫描线
Atlantis poj1151 线段树扫描线 题意 题目给了n个矩形,每个矩形给了左下角和右上角的坐标,矩形可能会重叠,求的是矩形最后的面积. 题解思路 这个是我线段树扫描线的第一题,听了学长的讲解 ...
- 本地启oracle实例服务无法重启,协议适配器错误
今天遇到一位朋友的oracle实例服务无法起来,启动时报错: 分析的原因是可能早上服务器突然断电造成的,经过对tns的测试 经过我们讨论和诊断,最后诊断的处理方法是将实例删了重装,处理后服务恢复正常: ...
- 事件对象e的实现原理
转自:https://segmentfault.com/q/1010000007337410?_ea=1313467 事件对象传递原理 1.前置知识回顾 在讲传递原理前,我们先看看普通函数是如何传递参 ...