洛谷P2727 01串 Stringsobits
P2727 01串 Stringsobits
- 24通过
- 55提交
- 题目提供者该用户不存在
- 标签USACO
- 难度普及+/提高
提交 讨论 题解
最新讨论
- 这题的思路是啥啊!!!跪求…
题目背景
考虑排好序的N(N<=31)位二进制数。
题目描述
他们是排列好的,而且包含所有长度为N且这个二进制数中1的位数的个数小于等于L(L<=N)的数。
你的任务是输出第i(1<=i<=长度为N的二进制数的个数)小的(注:题目这里表述不清,实际是,从最小的往大的数,数到第i个符合条件的,这个意思),长度为N,且1的位数的个数小于等于L的那个二进制数。
(例:100101中,N=6,含有位数为1的个数为3)。
输入输出格式
输入格式:
共一行,用空格分开的三个整数N,L,i。
输出格式:
共一行,输出满足条件的第i小的二进制数。
输入输出样例
输入样例#1:
5 3 19
输出样例#1:
10011
说明
题目翻译来自NOCOW。
USACO Training Section 3.2
之前写的没保存,被删了......
分析:如果直接枚举,N可能高达32,TLE.换个思路,每位只能填0或1,有点类似动态规划的思想,其实可以这么做.考虑从右往左第i位填的数字,如果填1,那么得到的数必然要比要求的I小,关键是怎么计算这个数是第几大呢?设f[a][b]为填a个数最多只能填b个1的方案数,可以知道如果第i位填1,那么大小是f[i-1][l] + 1,这个很好证明.f数组该怎么推呢?第i位要么填1,要么填0,f[i][j] = f[i-1][j-1] + f[i-1][j].f[i][0] = f[o][i] = 1.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; long long n, l, I, f[][]; int main()
{
scanf("%lld%lld%lld", &n, &l, &I);
for (int i = ; i <= n; i++)
f[i][] = ;
for (int i = ; i <= l; i++)
f[][i] = ;
for (int i = ; i <= n; i++)
for (int j = ; j <= l; j++)
if (j <= i)
f[i][j] = f[i - ][j] + f[i - ][j - ];
else
f[i][j] = f[i][i];
for (int i = n; i >= ; i--)
if (I && f[i - ][l] < I)
{
printf("");
I -= f[i - ][l];
l--;
}
else
printf("");
//while (); return ;
}
洛谷P2727 01串 Stringsobits的更多相关文章
- 洛谷 题解 P2727 【01串 Stringsobits】
本蒟蒻又双叒叕被爆踩辣! P2727 01串 Stringsobits 其实只要理解了就会觉得这是个傻逼题! 这题给的标签是 dp,搜索,数论 但是可以用二分的思路做! Solution: 从最高位开 ...
- [洛谷P1032] 字串变换
洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...
- 洛谷 P2697 宝石串
题目传送门 解题思路: 将红色的设置为-1,绿色的为1,统计前缀和sum,如果sum[i] == sum[j],则说明i~j是一个稳定的区间 因为答案要求最大,所以我们要记录每个sum值的最左端点(也 ...
- Luogu P2727 【01串 Stringsobits】
看到题解里好像都是用$DP$解决的,本着禁止DP的原则,我来提供一发纯数学其实和DP本质相同的题解,前两天刚反演题,脑子炸了,本来说换换脑子,结果还是数学 首先受进制思想启发,我们不妨按位考虑,考虑这 ...
- 洛谷 P1032 字串变换题解
题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1 ->B_1B1 A ...
- 洛谷P1141 01迷宫
题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...
- 洛谷 P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- 洛谷P1279 字串距离
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...
- 洛谷 P1032 字串变换 (BFS)
题目传送门 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出 STL大法好 这题最麻烦的其实是处理字符串,真正的搜索部分我个人认为也就只有橙题或黄题的难度.而处理字符串,正如前面所说,STL ...
随机推荐
- JavaScript中Call()以及Apply()的应用
apply()和call()的真正用武之地是能够扩充函数赖以运行的作用域 三点说明: 1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调 ...
- 4. 对list进行sort
一. sort命令 sort命令可以对list排序 sort命令把字段转先换为double类型在进行比较 sort排序list 127.0.0.1:6379> lrange list2 0 -1 ...
- 推荐一个css帮助手册的版本 同时提供chm和在线
版本保持更新 目录分类妥当 查阅很方便 就是习惯了jquery那种风格,略有不适应. 包括最新css3的内容 网址: http://css.doyoe.com/ chm下载地址: http://css ...
- 执行sh文件 进行MongoDB的业务逻辑导入
将从HDFS中的数据转化为Json格式写入文件后,十个文件的文件名为 文件名_01 ...._02 ....03格式. 编写个简单的sh文件 通过for do循环让i+1 文件名对应上就可以的- -执 ...
- Coding 初级教程(一)——用GitHub的GUI客户端对Coding的项目进行管理
一.概述 二.Git基本概念 1.有关存储的四个概念 2.分支(branch) 三.项目管理实战操作 1.安装 GHfW(GitHub for Windows) 2.在Coding上新建一个项目(新建 ...
- ubuntu安装mysql5.7
sudo apt-get updatesudo apt-get upgradesudo apt-get install mysql-server mysql-client #自动安装会装上5.7的 ...
- 如何动态添加和删除一个div
代码实例如下: <!DOCTYPE html><html><head><meta charset="utf-8"><meta ...
- Yii 框架表单验证---实例
- php 防止sql注入
Q:如果把用户输入的没有任何改动的放到SQL的查询语句中,很有可能会导致SQL注入,比如说下面的例子: $unsafe_variable = $_POST['user_input']; mysql_q ...
- java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...