【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号
【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号
题目
作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛。
然而,他有点迷信,标识奶牛用的二进制数字,必须只含有K位“1” (1 <= K <= 10)。 当然,每个标识数字的首位必须为“1”。
FJ按递增的顺序,安排标识数字,开始是最小可行的标识数字(由“1”组成的一个K位数)。
不幸的是,他没有记录下标识数字。请帮他计算,第N个标识数字 (1 <= N <= 10^7)。
题解
题意
求第\(n\)小的合法的数
合法:该数在二进制下有且仅有\(k\)个位置为1,最高位一定为1
分析
尝试去构造这个第\(n\)小的数
可以想到利用组合数
首先先确定长度
然后再判断方案数与组合数的大小,选择填0还是1
Code
#include<cstdio>
#define mx 10000000
using namespace std;
int n,k,i,j,s,cc,l,x,c[3005][3005];
int C(int x,int y)
{
if (x==y||y==0) return 1;
if (y==x-1||y==1) return x;
return c[x][y];
}
int main()
{
scanf("%d%d",&n,&k);
if (k==1)
{
printf("1");
for (i=1;i<n;i++)
printf("0");
return 0;
}
c[0][0]=1;
for (i=1;i<3000;i++)
{
c[i][0]=c[i][i]=1;
for (j=1;j<i;j++)
{
c[i][j]=c[i-1][j]+c[i-1][j-1];
if (c[i][j]>mx) c[i][j]=mx;
}
}
s=0;
i=k-1;
j=0;
while (s<n)
{
s+=C(i,j);
i++;
j++;
}
n-=s-C(i-1,j-1);
printf("1");
l=i-1;
x=j-1;
while (l)
{
if (x&&n<=C(l-1,x-1))
{
printf("0");
x--;
}
else
{
printf("1");
if (x) n-=C(l-1,x-1);
}
l--;
}
return 0;
}
【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号的更多相关文章
- JZOJ2020年8月11日提高组T1 密码
JZOJ2020年8月11日提高组T1 密码 题目 Description 在浩浩茫茫的苍穹深处,住着上帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏.今天他们正在观赏大地 ...
- 【GDKOI2014】JZOJ2020年8月13日提高组T1 阶乘
[GDKOI2014]JZOJ2020年8月13日提高组T1 阶乘 题目 Description Input 第一行有一个正整数T,表示测试数据的组数. 接下来的T行,每行输入两个十进制整数n和bas ...
- 【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底
[五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y ...
- 【GDOI2007】JZOJ2020年8月10日提高组T1 夏娜的菠萝包
[GDOI2007]JZOJ2020年8月10日提高组T1 夏娜的菠萝包 题目 Description 夏娜很喜欢吃菠萝包,她的经纪人RC每半个月就要为她安排接下来的菠萝包计划.今天是7月份,RC又要 ...
- 【佛山市选2013】JZOJ2020年8月7日提高组T1 回文子序列
[佛山市选2013]JZOJ2020年8月7日提高组T1 回文子序列 题目 描述 回文序列是指左右对称的序列.例如1 2 3 2 1是回文序列,但是1 2 3 2 2就不是.我们会给定一个N×M的矩阵 ...
- 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器
[GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...
- 【NOIP2015模拟11.4】JZOJ2020年8月6日提高组T2 最优交换
[NOIP2015模拟11.4]JZOJ2020年8月6日提高组T2 最优交换 题目 题解 题意 有一个长度为\(n\)的正整数 最多可以进行\(k\)次操作 每次操作交换相邻两个位置上的数 问可以得 ...
- JZOJ2020年9月5日提高组反思
JZOJ2020年9月5日提高组反思 T1 考试的时候没有头绪,就打了个暴力,愉快的拿到了10分的\(impossible\) 正解是\(DP\),设\(f[i][j][k]\)表示地\(i\)种币值 ...
- JZOJ2020年8月7日提高组反思
JZOJ2020年8月7日提高组反思 T1 暴力枚举 枚举起点和\(p\) 然后就 过了?! 根据本人不严谨的推算 时间复杂度\(O(\dfrac{n^7}{4})\) 数据太水就过去了QAQ T2 ...
随机推荐
- [Luogu P2014]选课 (树形DP)
题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...
- 【漏洞复现】Shiro<=1.2.4反序列化漏洞
0x01 概述 Shiro简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从 ...
- Maven依赖管理系统
[背景] 之前在领英上读到一篇软文,<Managing Software Dependency at Scale>,讲述了领英是如何处理模块之间的依赖解析,以及如何去更好的处理依赖关系以及 ...
- Core WebApi项目快速入门(二):Filter详解
Core的核心是DI,面向AOP的编程方式.在.NetCore中AOP的实现很大程度上依赖于Filter.下面就Core WebApi中的Filter进行举例. 其中鉴权中心我个人认为是比较重要的概念 ...
- HTML图片点击放大---关闭
<html lang="en"> <head> <meta charset="UTF-8"> </head> & ...
- Handler的源码和常见问题的解答不崩溃
Handler是Android中的消息处理机制,是一种线程间通信的解决方案,同时你也可以理解为它天然的为我们在主线程创建一个队列,队列中的消息顺序就是我们设置的延迟的时间,如果你想在Android中实 ...
- Python--安装 PyQt5, pyqt5-tools
# 使用豆瓣镜像源 anaconda prompt界面里输入: pip install pyqt5-tools -i https://pypi.douban.com/simple/
- java中保留两位小数的方法
1.BigDecimal的setScale // RoundingMode 舍入模式: // 1.UP/DOWN ->基准为数字0: // 2.CEILING/FLOOR ->基准为正负无 ...
- 【日拱一卒】链表——如何实现lru
LRU Redis的内存淘汰机制好几种,如ttl.random.lru. lru(less recently used)即最近最少使用策略,表示在最近一段时间内最少被使用到的Redis键,如果遇到内存 ...
- BATJTMD,大厂招聘,都招什么样Java程序员?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 Java学到什么程度可以找工作? 最近总看到类似这样的问题,也有一些工作3年左右的小 ...