bzoj5043 密码破译
来源:互联网 发布:线刷用什么软件 编辑:程序博客网 时间:2024/06/05 22:45
题目
dp神题,公式什么的我们想出来,看一发题解吧。
但是,这不是重点,重点是get到了一个新姿势。。
int类型如果右移超过了32位,前32位是无效的,也就是说移40位和移8位是一样的233。因为这个,我样例都没过,好菜呀。
#include<bits/stdc++.h>#define N 100000using namespace std;long long n,m,tmp;long long A[N+5],x,f[65][N+5],inf;long long c[N+5][2];inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline long long read(){ long long x=0,b=1; char c=nc(); for(;!(c<='9'&&c>='0');c=nc())if(c=='-')b=-1; for(;c<='9'&&c>='0';c=nc())x=x*10+c-'0'; return x*b;}inline void write(long long x){ if(x==0)putchar('0'); else { char buf[15]; long long len=0; if(x<0)putchar('-'),x=-x; while(x)buf[++len]=x%10+'0',x/=10; for(long long i=len;i>=1;i--)putchar(buf[i]); } putchar(' ');}int main(){ freopen("in.txt","r",stdin); n=read(),m=read(); for(long long i=1;i<=n;i++) { x=read(); for(long long j=0;j<60;j++)c[j][(x>>j&1)^1]++; } memset(f,37,sizeof(f)),inf=f[0][0]; f[60][0]=0; for(long long i=59;i>=0;i--) for(long long j=0;j<n;j++) if(f[i+1][j]!=inf) for(long long k=0;k<2;k++) { long long tmp=j*2-c[i][k]+((m>>i)&1); if(tmp>=0&&tmp<n)f[i][tmp]=min(f[i][tmp],f[i+1][j]*2+k); } cout<<(f[0][0]==inf?-1:f[0][0]); return 0;}
阅读全文
0 0
- [bzoj5043]密码破译
- [数学]bzoj5043密码破译
- bzoj5043 密码破译
- 破译密码
- 破译密码
- 破译密码
- 破译密码
- POJ3749 破译密码【密码】
- POJ 3749 破译密码
- pku 3749 破译密码
- PKU--3749 破译密码
- HDOJ 1287 破译密码
- 本地QQ密码破译
- 破译电脑密码方法
- vs 密码破译
- HDOJ 1287:破译密码
- poj 3749 破译密码
- 破译人性弱点密码
- 基础练习 BASIC-27 2n皇后问题
- JDBC学习之路-对大文本数据的操作
- 解析html
- 进程替换
- 架构师不可不知的十大可扩展架构
- bzoj5043 密码破译
- 百度笔试找出最大信号长度的方法
- 基础练习 BASIC-28 Huffuman树
- 升级nginx 至 1.9.5以上版本 来支持 HTTP 2.0
- MySQL基础操作
- Java 9 中的 9 个新特性
- python:matplotlib及pandas绘图(1)
- Java【关于如何招聘靠谱的JAVA开发工程师】
- 开发板s5p6818刷Android系统: