洛谷P3048 [USACO12FEB]牛的IDCow IDs
P3048 [USACO12FEB]牛的IDCow IDs
- 12通过
- 67提交
- 题目提供者lin_toto
- 标签USACO2012
- 难度普及/提高-
- 时空限制1s / 128MB
提交 讨论 题解
最新讨论更多讨论
- 谁能解释一下这个样例啊....
题目描述
Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, he is a bit superstitious, and only labels cows with binary numbers that have exactly K "1" bits (1 <= K <= 10). The leading bit of each label is always a "1" bit, of course. FJ assigns labels in increasing numeric order, starting from the smallest possible valid label -- a K-bit number consisting of all "1" bits. Unfortunately, he loses track of his labeling and needs your help: please determine the Nth label he should assign (1 <= N <= 10^7).
FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头。FJ按升序编号,第一个编号是由K个"1"组成。
请问第N(1 <= N <= 10^7)个编号是什么。
输入输出格式
输入格式:
- Line 1: Two space-separated integers, N and K.
输出格式:
输入输出样例
7 3
10110
分析:首先有一个很简单的结论:一个只有0和1的数字串,只有1对数字串大小有影响,0没有影响。很简单证明,大小取决于1的位置和数量。
这道题有一个限制:第一位必须是0,那么我们先将这个串用足够大小保存,足够大的话我们可以添加前导0,到最后从第一个非0位输出即可,也就是说我们要找到一个m,使得C(m,k) >= n,这个可以用二分实现,我们先弄一个m位的全是0的串。然后考虑C(i-1,k)的意义,即还剩i-1位可以填k个1的方案数,也就是说我们还有C(i,k)个不同大小的数,如果C(i-1,k) < n,则说明剩下的数还不够n个,我们不能找到第n大的数,于是我们在i位填1,那么这个数就是能够出现的C(i-1,k)个数中最大的,n-=C(i-1,k),k--,如果C(i-1,k) >= n,说明后面还能找到第n大的,我们填0即可,就这样模拟一下就好了。
不过这个组合数会非常大,还会爆long long,需要分类讨论进行二分.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; long long n, k, f[][], m;
long long num[], cnt; long long Combination(long long n, long long m)
{
long long ans = ;
for (long long i = n; i >= (n - m + ); --i)
ans *= i;
while (m)
ans /= m--;
return ans;
} int main()
{
scanf("%lld%lld", &n, &k);
if (k == )
{
for (int i = n; i; i--)
{
if (i == n)
printf("");
else
printf("");
}
return ;
}
else
{
if (k == )
{
long long l = , r = ;
while (l <= r)
{
long long mid = (l + r) >> ;
if (Combination(mid, k) >= n)
{
m = mid;
r = mid - ;
}
else
l = mid + ;
}
}
else
{
if (k >= )
{
long long l = , r = ;
while (l <= r)
{
long long mid = (l + r) >> ;
if (Combination(mid, k) >= n)
{
m = mid;
r = mid - ;
}
else
l = mid + ;
}
}
else
{
long long l = , r = ;
while (l <= r)
{
long long mid = (l + r) >> ;
if (Combination(mid, k) >= n)
{
m = mid;
r = mid - ;
}
else
l = mid + ;
}
}
}
for (long long i = m; i; i--)
{
long long t = Combination(i - , k);
if (t < n)
{
num[i] = ;
n -= t;
k--;
if (!cnt)
cnt = i;
}
if (!k || !n)
break;
}
for (long long i = cnt; i; i--)
printf("%d", num[i]);
} return ;
}
洛谷P3048 [USACO12FEB]牛的IDCow IDs的更多相关文章
- 洛谷 P3048 [USACO12FEB]牛的IDCow IDs
题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...
- LUOGU P3048 [USACO12FEB]牛的IDCow IDs(组合数)
传送门 解题思路 组合数学.首先肯定是要先枚举位数,假如枚举到第\(i\)位.我们可以把第一位固定,然后那么后面的随意放\(1\),个数就为\(C_{i-1}^{k-1}\).然后每次枚举时如果方案\ ...
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- [USACO12FEB]牛的IDCow IDs
题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...
- [USACO12FEB]牛的IDCow IDs 一题多解(求二进制中有k个1 ,第n大的数)
题目: FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头.FJ按升序编号,第一个编号是由K个"1&q ...
- 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game
洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...
- 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
- 洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup
https://www.luogu.org/problem/show?pid=3029 题目描述 Farmer John has hired a professional photographer t ...
- 洛谷P3047 [USACO12FEB]Nearby Cows(树形dp)
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
随机推荐
- 【Pthon入门学习】利用slice实现str的strip函数,类似C#中的string.trim
1.先了解下切片的知识点 切片是str, list,tuple中常用的取部分元素的操作. 例如: L =['北京', '上海', '天津', '深圳', '石家庄'] print(L[0:2]) # ...
- PHP使用static关键字声明静态属性和静态方法
PHP使用static关键字声明静态属性和静态方法 在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法. 静态属性和静态方法不需要在被类实例化的情况下就可以直接使用. ...
- Sublime Text 3高效实用快捷键
2017-11-27 16:18:48 Sublime Text 3 高效实用快捷键 Sublime Text 3 软件及注册码 官网下载链接在这里,有时候会很神奇的上不去,可能是因为被Q了,可能就是 ...
- mysql数据库查询
查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...
- 1014-C程序的语法树
- Scrum立会报告+燃尽图(Beta阶段第二周第四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2412 项目地址:https://coding.net/u/wuyy694 ...
- 软工实践-Alpha 冲刺 (10/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 完成所有界面的链接,整理与测试 展示GitHub当日代码/ ...
- 团队Alpha冲刺(十)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 补发9.26“天天向上”团队Scrum站立会议
组长:王森 组员:张金生 张政 栾骄阳 时间:2016.09.26 地点:612寝 组员 已完成 未完成 王森 可行性分析 找出设计亮点 张金生 寻找UI素材 设计用户操作 张政 搭建环境 基础逻辑框 ...
- selenium 概念及练习 !
1.selenium中如何判断元素是否存在? 2.selenium中hidden或者是display = none的元素是否可以定位到? 3.selenium中如何保证操作元素的成功率?也就是说如何保 ...