[Bzoj5043][Lydsy1709月赛]密码破译(按位dp)
5043: [Lydsy1709月赛]密码破译
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 477 Solved: 125
[Submit][Status][Discuss]
Description
小Q发明了一个新的加密算法,对于一个长度为n的非负整数序列a_1,a_2,...,a_n,他会随机选择一个非负整数k,
Input
Output
输出一个非负整数k,若无解输出-1,若有多组解,输出最小的k。
Sample Input
Sample Output
HINT
Source
分析:
这种与位运算有关的,大多数都是拆开按位从高到低贪心,或者从低到高dp。
这道题就是定义f[i][j]表示i位能向下一位进j个(1<<i);
记录每一位数字总和,讨论每一位k是0或1再与m的每一位是0或1作比,从低到高dp一遍就好了
j最多是n所以复杂度是O(60*n)
AC代码:
# include <iostream>
# include <cstdio>
using namespace std;
const int N = 1e5 + ;
typedef long long LL;
const LL inf = 1LL << ;
LL f[][N],p[],m,x;int n;
int main()
{
scanf("%d %lld",&n,&m);
for(int i = ;i <= n;i++)
{
scanf("%lld",&x);
for(int j = ;~j;j--)
p[j + ] += x >> j & ;
}
for(int i = ;i <= n;i++)
for(int j = ;~j;j--)
f[j][i] = inf;
f[][] = ;
for(int j = ;j <= ;j++)
{
for(int i = ;i <= n;i++)
{
if(((p[j + ] + i) & ) == (m >> j & ))
f[j + ][(p[j + ] + i) >> ] = min(f[j + ][(p[j + ] + i) >> ],f[j][i]);
if(((n - p[j + ] + i) & ) == (m >> j & ))
f[j + ][(n - p[j + ] + i) >> ] = min(f[j + ][(n - p[j + ] + i) >> ],f[j][i] + (1LL << j));
}
}
printf("%lld\n",f[][] == inf ? - : f[][]);
}
[Bzoj5043][Lydsy1709月赛]密码破译(按位dp)的更多相关文章
- 有关按位DP
这是一道正式比赛的题目 数据范围是 10^999 ~ 10^1000 的两个整数以及一个k我记得好像是不超过100,计算两个数中间有多少个每一位相乘最后和k取摸等于0的数.这道题对于不会按位dp的人是 ...
- [SDOI2019]移动金币(博弈论+阶梯Nim+按位DP)
首先可以把问题转化一下:m堆石子,一共石子数不超过(n-m)颗,每次可以将一堆中一些石子推向前一堆,无法操作则失败,问有多少种方法使得先手必胜? 然后这个显然是个阶梯Nim,然后有这样的结论:奇数层异 ...
- bzoj5043: 密码破译
Description 小Q发明了一个新的加密算法,对于一个长度为n的非负整数序列a_1,a_2,...,a_n,他会随机选择一个非负整数k, 将每个数都异或上k得到b_1,b_2,...,b_n,即 ...
- [Bzoj4832][Lydsy2017年4月月赛]抵制克苏恩 (期望dp)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 673 Solved: 261[Submit][ ...
- Machine Learning for hackers读书笔记(七)优化:密码破译
#凯撒密码:将每一个字母替换为字母表中下一位字母,比如a变成b. english.letters <- c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ...
- [BZOJ 1559] [JSOI2009] 密码 【AC自动机DP】
题目链接:BZOJ - 1559 题目分析 将给定的串建成AC自动机,然后在AC自动机上状压DP. 转移边就是Father -> Son 或 Now -> Fail. f[i][j][k] ...
- BZOJ-5-4300: 绝世好题-位-DP
思路 :题意描述我也很绝望 .先说一下题意 : 给定长度为n数组a [ ],求a[ ] 的一个最大子序列(可以不连续),使得b [ i ]& b [ i - 1 ] ! = 0.求最大的 b数 ...
- 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 275 Solved: 87 Descripti ...
- 【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)
[BZOJ5073][Lydsy十月月赛]小A的咒语 题解:沙茶DP,完全不用后缀数组. 用f[i][j]表示用了A的前i个字符,用了j段,最远能匹配到哪.因为显然我们能匹配到的地方越远越好,所以我们 ...
随机推荐
- webuploader项目中多文件上传实例
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- applicationContext.xml重要配置
<!-- 加载 hibernate.properties 文件--> <bean id="propertyConfig" class="org.spri ...
- (39)zabbix snmp自定义OID nginx监控实例
为什么要自定义OID? 前面的文章已经讲过zabbix如何使用snmp监控服务器,但是他有一个很明显的局限性:只能监控定义好的OID项目 假如我们想知道nginx进程是否在运行?在没有zabbix a ...
- linux-MySQL基本指令-增删改查
常用指令 指令作用 指令 查看/查询 show,select,desc 创建 create 删除 drop,delete,truncate 切换/进入 use 添加记录 insert 查询类 查看数据 ...
- DocDokuPLM 2.5安装
安装记录:(大部分是环境安装和配置) 未完待续.
- verilog behavioral modeling --procedural assignments
1.procedural assignments are used for updating reg ,integer , time ,real,realtime and memory data ty ...
- 5.电影搜索之 自动填充,也叫autocomplete、搜索建议!
什么叫自动填充,用过百度的应该都知道!当你输入关键词之后,会有一个下拉的候选列表,都是与你输入的内容相关的,这个就是自动填充的搜索建议.一般的搜索引擎或者站内搜索都会有这个功能. 今天分享下这个功能的 ...
- PAT Basic 1063
1063 计算谱半径 在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的特征值 { a1+b1i,⋯,an+bni },它们的模为实部 ...
- Uiautomator简介及其环境搭建、测试执行
UiAutomator框架使用指南 UiAutomator是Google开发的自动化测试工具,通过UI创建自动化测试代码,来测试界面(UI)的有效功能,可以针对应用程序运行在一个或更多的设备上.我们并 ...
- BZOJ 2295: [POJ Challenge]我爱你啊
由于是子序列,那么难度就在于读入 #include<cstdio> #include<algorithm> #include<cstring> using name ...