题目描述

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.

输出格式:

输入输出样例

输入样例#1:

7 3
输出样例#1:
10110 
我们先将这个串用足够大小保存,足够大的话我们可以添加前导0,到最后从第一个非0位输出即可,也就是说我们要找到一个m,使得C(m,k) >= n,可以二分求m
这题最坑的是为了防止溢出longlong,所以要将k分情况制定二分右界

如果做到第i位,还要填j个1,那么这一位填0的方案数就是C(i-1,j),即还剩i-1位可以填j个1的方案数。

如果这个数小于n,那么这一位填1,并且n要减去这个数,否则这一位填0。

myys

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
ll n;
int k,cnt,m,ans[];
ll C(int x,int y)
{int i;
if (x>y) return ;
ll s=;
for (i=y;i>y-x;i--)
s*=i;
for (i=x;i>=;i--)
s/=i;
return s;
}
int main()
{int i;
cin>>n>>k;
if (k==)
{
cout<<;
for (i=n-;i>=;i--)
{
printf("");
}
return ;
}
int l=,r;
if (k>=)
r=;
else if (k>=)
r=;
else r=;
while (l<=r)
{
int mid=(l+r)/;
if (C(k,mid)>=n) m=mid,r=mid-;
else l=mid+;
}
cnt=;
for (i=m;i>=;i--)
{
ll p=C(k,i-);
if (p<n)
{
k--;
ans[i]=;
n-=p;
if (cnt==)
{
cnt=i;
}
}
if (k==||n==)
{
break;
}
}
for (i=cnt;i>=;i--)
printf("%d",ans[i]);
}

最新文章

  1. Android Studio使用时源码到处报红色警告,运行时又没错
  2. Find linux下
  3. java selenium (十) 操作浏览器
  4. HDU 5353
  5. sql server日期时间转字符串(转)
  6. MySql命令——show,分页,正则表达式
  7. Linux 核心阅读工具vim+ctags+cscope+taglist
  8. Java Web整合开发(20) -- Hibernate入门
  9. Web开发人员不要错过的60款用户界面设计工具(上)
  10. jmeter系列-------脚本调试
  11. kudu系列: Java API使用和效率测试
  12. Django 笔记(二) 新建 ~ 渲染
  13. Asp.net core (学习笔记 路由和语言 route &amp; language)
  14. Chrome查看HTTP
  15. Javascript中的函数(三)
  16. Ubuntu 安装 VS code
  17. swift 官方获取JSON 数据方法
  18. openvpn 负载均衡方案
  19. Zend Studio 安装破解和汉化
  20. handlebars——另外一个模板引擎

热门文章

  1. Alpha冲刺——Day2
  2. iOS极光推送SDK的使用流程
  3. Flask 学习 十三 应用编程接口
  4. ASP.NET MVC编程——单元测试
  5. java图片处理开源框架
  6. 详解JavaScript对象继承方式
  7. it&#39;s a big trick
  8. Docker1.12.6+CentOS7.3 的安装
  9. 新概念英语(1-57)An unusual day
  10. POJ-2993 Emag eht htiw Em Pleh---棋盘模拟