【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界面布局的方法,优点是灵 ...
随机推荐
- Delphi XE2 之 FireMonkey 入门(15) - 滤镜: 获取滤镜信息
滤镜类的继承关系: TObject -> TPersistent -> TFilter -> TShaderFilter -> { 具体的滤镜类 } //下面例子首先会用到 F ...
- 字符串 字符数组, pcha string 之间的相互转化, 很重要。 很蛋疼
http://www.cnblogs.com/del88/p/5448981.html Delphi字符串.PChar与字符数组之间的转换 来自:http://my.oschina.net/kaven ...
- 类TreeSet
/* * TreeSet能够对元素按照某种规则进行排序 * * 排序有2种方式 * A自然排序 * B比较器排序 * */ import java.util.TreeSet; /* * TreeSet ...
- MongoDB优化心得分享
这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...
- python爬虫——爬取淘票票正在热映电影
今天正好学习了一下python的爬虫,觉得收获蛮大的,所以写一篇博客帮助想学习爬虫的伙伴们. 这里我就以一个简单地爬取淘票票正在热映电影为例,介绍一下一个爬虫的完整流程. 首先,话不多说,上干货——源 ...
- RandomAccessFile类使用说明
RandomAccessFile类是Java Io体系中功能最为丰富的文件访问类,它提供了众多的文件访问方法.RandomAccessFile类支持“随机访问”方式,这里的“随机”是指程序可以直接跳到 ...
- Visual Studio 2017打包安装项目
在我们用VS编好上位机后,就可以在自己电脑运行上位机,但是想其他人电脑运行上位机可能就行不通了,因为其他人电脑不一定有所需要的运行环境.这时我们就需要打包安装,把运行软件所需要的环境都打包在安装包里. ...
- linux内核的gpiolib详解
#include <linux/init.h> // __init __exit #include <linux/module.h> // module_init module ...
- 当系统开启safe_mode和 open_basedir
当系统开启safe_mode和 open_basedir,在程序中使用以下语句curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);并且遇到301,302状态吗时 ...
- require 和 import 详解
前言 JS模块化编程是前端小伙伴们必不可少的知识,下面妹子将于自认为比较清晰的方式列举出来. 1 require 特点: 1.运行时加载 2.拷贝到本页面 3.全部引入 1.1 CommonJS No ...