hihoCoder 扩展二进制数
明天就要去实验室干活了。。。。下次再打题不知是何时。。。。
题目链接:
http://hihocoder.com/contest/hihointerview11/problem/2
这题不难,一开始想错了。。。。其实并不复杂,从低位到高位,逐个1处理。
我用了个简单dp。
先将n转化成二进制。
我们划分出每个1+x个0的情况(x可为0)。
对于单个模块假设有s0[i+1]种情况,在前一个模块退一个1的情况下有s1[i+1]中情况。(这是有规律的)
假设不进位的情况下情况数:dp[0][i]
进位的情况下情况数:dp[1][i]
这样得到转移方程:dp[0][i+1] = s0[i+1]*dp[0][i] + dp[1][i]
dp[1][i+1] = s1[i+1]*dp[0][i] + dp[1][i]
AC代码:
#include <bits/stdc++.h> using namespace std;
const int maxn = ; int p[maxn];
typedef long long int64; int64 dp[][maxn]; int main(void){
int n;
scanf("%d", &n); if(n == ){
printf("1\n");
}else{
int cnt = ;
while(n){
p[cnt++] = n%;
n >>= ;
} vector<int> v;
int t = ;
for(int i = ; i < cnt; ++i){
if(p[i] == ){
t++;
}else{
v.push_back(t);
t = ;
}
}
//cout << "haha" << endl; int sz = v.size();
int64 ans;
dp[][] = v[], dp[][] = v[]-;
for(int i = ; i < sz; ++i){
dp[][i] = v[i]*dp[][i-] + dp[][i-];
dp[][i] = (v[i]-)*dp[][i-] + dp[][i-];
}
/*for(int i = 0; i < sz; ++i)
cout << dp[0][i] << " " << dp[1][i] << endl;*/
ans = dp[][sz-]; printf("%lld\n", ans);
} return ;
}
hihoCoder 扩展二进制数的更多相关文章
- hihocoder 1331 - 扩展二进制数 - [hiho一下168周]
题目链接:http://hihocoder.com/problemset/problem/1331 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们都知道二进制数的每 ...
- hihocoder 1331 扩展二进制数(递归)
传送门 题意 略 分析 由低位向高位考虑,令f(n)为n的扩展二进制数表示数 1.当前数为偶数,末位为0或2,那么f(n)=f(n/2)+f(n/2-1) 2.当前数为奇数,末位为1,那么f(n)=f ...
- hihoCoder扩展欧几里得
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- hiho一下 第168周
题目1 : 扩展二进制数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们都知道二进制数的每一位可以是0或1.有一天小Hi突发奇想:如果允许使用数字2会发生什么事情? ...
- hihocoder 1084 扩展KMP && 2014 北京邀请赛 Justice String
hihocoder 1084 : http://hihocoder.com/problemset/problem/1084 北京邀请赛 Just String http://www.bnuoj.co ...
- 【hihocoder 1297】数论四·扩展欧几里德
[题目链接]:http://hihocoder.com/problemset/problem/1297 [题意] [题解] 问题可以转化为数学问题 即(s1+v1*t)%m == (s2+v2*t)% ...
- 【hihocoder 1257 Snake Carpet】构造
2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...
- Unicode其实是Latin1的扩展。只有一个低字节的Uncode字符其实就是Latin1字符——附各种字符编码表及转换表
一.概念 1,ASCII ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码.是 ...
- ES6数字扩展
前面的话 本文将详细介绍ES6数字扩展 指数运算符 ES2016引入的唯一一个JS语法变化是求幂运算符,它是一种将指数应用于基数的数学运算.JS已有的Math.pow()方法可以执行求幂运算,但它也是 ...
随机推荐
- Minimum Spanning Tree.prim/kruskal(并查集)
开始了最小生成树,以简单应用为例hoj1323,1232(求连通分支数,直接并查集即可) prim(n*n) 一般用于稠密图,而Kruskal(m*log(m))用于系稀疏图 #include< ...
- Sudoku---hdu2676(数独DFS)
http://poj.org/problem?id=2676 递归深搜 #include<stdio.h> #include<string.h> #include<alg ...
- C/C++ (一)
c语言中的逻辑运算符都是短路运算,一旦能够确定整个表达式的值就不再计算,配合c的定义的灵活性,可以写出很多漂亮的程序. 例如 如果要在一个长为n的数列s中找到第k个没被标记过的数 for(i=1,j= ...
- FTP操作类的使用
FTP(文件传输协议) FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...
- Java实现敏感词过滤代码
原文:http://www.open-open.com/code/view/1445762764148 import java.io.BufferedReader; import java.io.Fi ...
- Windows下C/C++连接mysql数据库的方法
步骤 安装MySQL数据库 项目属性页->C/C++->常规->附加包含目录:xxx\mysql Server 5.6\include 项目属性页->链接器->常规-&g ...
- 【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)
首先.在開始搭建MyEclipse的开发环境之前.还有三步工具的安装须要完毕,仅仅要在安装配置成功之后才干够进入以下的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官 ...
- js实现的美女瀑布流效果代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- PHP 按位与或 (^ 、&)
今天朋友群里朋友问了下 按位与或的问题.. 按位于主要是对二进制数操作. <?php $a = 1; $b = 2; $c = $a^b; ?> 这里不是单纯的相加关系 十进制 1换算成二 ...
- Jenkins系列之-—04 配置用户和权限控制
一.安装插件 插件名称:Role-based Authorization Strategy Role Strategy Plugin插件可以对构建的项目进行授权管理,让不同的用户管理不同的项目. 二. ...