传送门

解题思路

  组合数学。首先肯定是要先枚举位数,假如枚举到第\(i\)位。我们可以把第一位固定,然后那么后面的随意放\(1\),个数就为\(C_{i-1}^{k-1}\)。然后每次枚举时如果方案\(>n\)就说明位数为\(i\),否则就让\(n-C_{i-1}^{k-1}\),然后继续枚举下去。这样的话我们就确定了第一位,后面的位其实和数位\(dp\)里试填法的思路差不多,就是看\(n\)是否大于当前位为\(0\)时后面的方案数,如果大就把这一位设为\(1\),然后减掉方案。算组合数有一个小\(trick\)就是先用分子约一个分母里比较大的,因为这道题\(k<=10\),所以约完后暴力乘是不会炸\(long long\)的。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib> using namespace std;
const int MAXN = 1005;
typedef long long LL; int n,k,ans[1000005];
inline LL C(int x,int y){
if(x<y) return 0;
if(!y) return 0;if(x==y) return 1;
int lim=max(y,x-y),c=min(y,x-y);
LL ret=1;
for(register int i=x;i>=lim+1;i--)
ret=ret*i;
for(register int i=2;i<=c;i++)
ret=ret/i;
return ret;
} int main(){
scanf("%d%d",&n,&k);
if(n==1) {while(k--) putchar('1');putchar('\n');return 0;}
if(k==1) {putchar('1');n--;while(n--) putchar('0');putchar('\n');return 0;}
n--;int l=k+1;
while(C(l-1,k-1)<=n){
n-=C(l-1,k-1);l++;
}
ans[1]=1;int res=k-1;putchar('1');
for(register int i=2;i<=l;i++){
LL te=C(l-i,res);
if(n>te && res) {ans[i]=1;n-=te;res--;}
putchar(ans[i]+'0');
}putchar('\n');
return 0;
}

最新文章

  1. [转载]:STM32为什么必须先配置时钟再配置GPIO
  2. ls目录内容
  3. 从网页上抓取Windows补丁信息然后整型输出(Python)
  4. ubuntu 更改时区
  5. ensure LANG and/or LC_* environment variables are set correctly
  6. Apache和Nginx配置支持苹果ATS方法
  7. qt QMessageBox QInputDialog
  8. CentOS 6破解Mysql5.5的办法
  9. JSOI2009 游戏
  10. tomcat6~7~8用户设置及一个独立服务器上跑多个tomcat配置JVM设置优化亲测
  11. 动态类(Dynamic)应用
  12. 确认oracle数据库错误日志文件位置
  13. Oracle 12c 单实例安装
  14. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket+crowd+seafile (零) 修改端口的问题
  15. GO slim
  16. java.util.concurrent ThreadPoolExecutor源码分析
  17. [arm学习]makefile学习总结
  18. Java-Java程序设计的基本概念
  19. PyQt5教程——组件 Ⅱ(八)
  20. Telnet远程重启路由器TP-LINK

热门文章

  1. 30个优秀的CSS技术和实例 By 彬Go 2008-12-04
  2. EE5111_A0206839W
  3. C#中Json和类的相互转化
  4. pandas--排序和排名
  5. one-hot encoding与哑变量的区别
  6. vuex之module
  7. Q:简单实现URL只能页面跳转,禁止直接访问
  8. 阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准
  9. NOIp2018集训test-10-4/test-10-5 (联考四day1/day2)
  10. 高可用开源方案Heartbeat vs Keepalived