博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Bzoj5043][Lydsy1709月赛]密码破译(按位dp)
阅读量:4879 次
发布时间:2019-06-11

本文共 1545 字,大约阅读时间需要 5 分钟。

5043: [Lydsy1709月赛]密码破译


 

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 477  Solved: 125
[][][]

Description


 

 小Q发明了一个新的加密算法,对于一个长度为n的非负整数序列a_1,a_2,...,a_n,他会随机选择一个非负整数k,

将每个数都异或上k得到b_1,b_2,...,b_n,即b_i=a_i xor k。不幸的是,健忘的小Q睡了一觉之后就把密钥k忘得
一干二净了,不过他隐约记得a_1+a_2+...+a_n的值为m,你能帮他找到一个可行的密钥吗
 

Input


 

第一行包含两个整数n,m(1<=n<=100000,0<=m<2^{60}),分别表示序列的长度以及加密前所有数的和。
第二行包含n个整数b_1,b_2,...,b_n(0<=b_i<2^{60}),表示加密后的序列。
 

Output


 

 输出一个非负整数k,若无解输出-1,若有多组解,输出最小的k。

 

Sample Input


 

3 51 2 3

 

Sample Output


 

1

 

HINT


 

 

Source


 

 

分析:


 

这种与位运算有关的,大多数都是拆开按位从高到低贪心,或者从低到高dp。

这道题就是定义f[i][j]表示i位能向下一位进j个(1<<i);

记录每一位数字总和,讨论每一位k是0或1再与m的每一位是0或1作比,从低到高dp一遍就好了

j最多是n所以复杂度是O(60*n)

 

AC代码:


# include 
# include
using namespace std;const int N = 1e5 + 12;typedef long long LL;const LL inf = 1LL << 61;LL f[61][N],p[61],m,x;int n;int main(){ scanf("%d %lld",&n,&m); for(int i = 1;i <= n;i++) { scanf("%lld",&x); for(int j = 60;~j;j--) p[j + 1] += x >> j & 1; } for(int i = 0;i <= n;i++) for(int j = 60;~j;j--) f[j][i] = inf; f[0][0] = 0; for(int j = 0;j <= 59;j++) { for(int i = 0;i <= n;i++) { if(((p[j + 1] + i) & 1) == (m >> j & 1)) f[j + 1][(p[j + 1] + i) >> 1] = min(f[j + 1][(p[j + 1] + i) >> 1],f[j][i]); if(((n - p[j + 1] + i) & 1) == (m >> j & 1)) f[j + 1][(n - p[j + 1] + i) >> 1] = min(f[j + 1][(n - p[j + 1] + i) >> 1],f[j][i] + (1LL << j)); } } printf("%lld\n",f[60][0] == inf ? -1 : f[60][0]);}

 

转载于:https://www.cnblogs.com/lzdhydzzh/p/8819078.html

你可能感兴趣的文章
字符串专题一:KMP算法
查看>>
yum安装mongodb
查看>>
项目:JavaWeb聊天室(问题汇总)
查看>>
hdu 4627 The Unsolvable Problem(暴力的搜索)
查看>>
链表各类操作详解
查看>>
Docker镜像相关
查看>>
Linux系统最小化安装之后的系统基础环境安装以及内核优化脚本
查看>>
Thinkphp 3.2笔记
查看>>
Apache 目录权限
查看>>
使用poi读取excel数据示例
查看>>
datatables ajax异步分页
查看>>
【网络收集】MySql中IS NOT NULL与!=NULL的区别
查看>>
学习笔记-人脸识别第三讲
查看>>
RHEL7开机不能正常进入系统(图形化界面)
查看>>
Android开发环境搭建完全图解
查看>>
详解BOM头以及去掉BOM头的方法
查看>>
PHP 手机浏览器访问网站获取手机相关信息方法集锦
查看>>
09年电子竞赛参赛技巧经验11条(转载)
查看>>
CSS颜色
查看>>
前端自动化之(一)—浏览器自动实时刷新
查看>>