【NOIP2012模拟8.7】奶牛编号
Description

Input

Output

Solution
对于这道题,我们先设0放x个,1放k个k个
设当前剩下x'个0和k'个1,则对于剩下的位置,我们可以把它抽象成将x'个0插入到x'+k'个位置中,方案数为\(C_{x'+k'-1}^{x'}\)
因此我们可以先枚举放置的0的个数,当总方案数\(\geqslant\)n时,那么我们要求的答案长度便求了出来
于是我们可以暴力枚举了
即使我们知道了答案的长度,暴力枚举仍然不在考虑范围内,因为它还是会炸
而上文提到的组合数又派上了用场
我们用组合数计算出当前这个位置放0的方案数,若其小于当前要求的n,则说明我们要求的答案在该位一定放1,否则一定放0。这样我们就可以一路递推下去,以O(len)的时间算出答案。
友情提示:作者组合数使用了二维,理论极限数据过不去,但数据过水再加点小优化就卡过去了,正解好像要用一维的来着。
Code
#include <cstdio>
using namespace std;
int n,k,len,x,i,j,f[3000001],c[3001][3001];
long long p,num;
int C(int x,int y)
{
if (y==0 || x==y) return 1;
if (y==1 || y==x-1) return x;
return c[x][y];
}
void dg(int x,int y,int z)
{
int g;
if (x>len)
{
for (int i=1;i<=len;i++)
printf("%d",f[i]);
return;
}
if (x==1)
{
f[1]=1;
dg(x+1,y,z);
}else
{
if (z==len-x+1)
{
dg(len+1,y,z);
return;
}
g=C(len-x,z-1);
if (g>=y)
{
f[x]=0;
dg(x+1,y,z-1);
}else
{
f[x]=1;
dg(x+1,y-g,z);
}
}
}
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%d%d",&n,&k);
if (k==1)
{
printf("1");
for (i=1;i<n;i++)
printf("0");
return 0;
}
c[1][1]=c[1][0]=1;
for (i=2;i<=3000;i++)
{
c[i][0]=1;
for (j=1;j<=i;j++)
c[i][j]=c[i-1][j-1]+c[i-1][j];
}
for (i=0;i<=n;i++)
if (c[k+i-1][i]+p>=n)
{
len=k+i;
break;
}else p+=c[k+i-1][i];
n-=p;
dg(1,n,len-k);
}
【NOIP2012模拟8.7】奶牛编号的更多相关文章
- NOIP2012模拟试题【奶牛晒衣服】
1.奶牛晒衣服(dry) [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任 ...
- 【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号
[NOIP2012模拟8.7]JZOJ2020年8月8日提高组T1 奶牛编号 题目 作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛. 然而,他有点迷信,标识奶牛用的二进制数字 ...
- NOIP2012模拟试题 121105【奶牛排队(tahort)
3.奶牛排队(tahort) [ 问题描述] 奶牛在熊大妈的带领下排成了一条直队. 显然,不同的奶牛身高不一定相同…… 现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛A是最矮的,最右边的 ...
- 奶牛编号(Cowids) [NOIP模拟]
问题描述作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛.然而,他有点迷信,标识奶牛用的二进制数字,必须只含有 K 位“1”(1 <= K <= 10). 当然,每 ...
- 【NOIP2012模拟10.25】剪草
题目 有N棵小草,编号0至N-1.奶牛Bessie不喜欢小草,所以Bessie要用剪刀剪草,目标是使得这N棵小草的高度总和不超过H.在第0时刻,第i棵小草的高度是h[i],接下来的每个整数时刻,会依次 ...
- NOIP2012模拟试题【圆圈舞蹈( circle)
2.圆圈舞蹈( circle) [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺 ...
- [NOIP模拟赛][贪心]奶牛晒衣服.
奶牛晒衣服(dry) [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任.洗 ...
- 【NOIP2012模拟10.25】单元格
题目 在一个R行C列的表格里,我们要选出3个不同的单元格.但要满足如下的两个条件: (1)选中的任意两个单元格都不在同一行. (2)选中的任意两个单元格都不在同一列. 假设我们选中的单元格分别是:A, ...
- JZOJ【NOIP2012模拟8.9】2020.10.5 T1
逐个击破 题目 Description 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走, ...
随机推荐
- 2020-04-13:TCP协议本身会导致什么样的安全问题?
福哥答案2020-04-14: 洪泛攻击
- C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3746 访问. 在一个给定的数组nums中,总是存在一个最大元素 ...
- PYTHON-错误-函数有返回值未接收导致替换不成功
#1.有返回值,没有赋值,替换不成功 cxj = 'guapi' cxj.replace(cxj,'2b') print(cxj) #2.有返回值,赋值,替换成功 cxj = 'guapi' cxj ...
- 这都Java15了,Java7特性还没整明白?
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- github Repository not found 解决办法
git pull的时候遇到下面的报错. remote: Repository not found fatal: repository 'https://github.com/MyRepo/projec ...
- 第2章 执行SparkSQL查询
第2章 执行SparkSQL查询 2.1 命令行查询流程 打开Spark shell 例子:查询大于30岁的用户 创建如下JSON文件,注意JSON的格式: {"name":&qu ...
- promise的常用情况
因为js是单线程的,所以一旦代码中有报错,就不会执行下面的了,如下333就未打印 console.log(111)throw Error(222)console.log(333) 好像与promise ...
- IDEA创建动态Web项目
1.IDEA创建动态Web项目 1.1.使用IDEA创建动态Web项目,选择Java Enterprise,记得选择服务器,我这里使用的时tomcat 1.2记得勾选Web Application,其 ...
- 给你的Swagger文档换套附魔皮肤吧
前言 相信无论是前端或是后端的程序员对Swagger都不怎么陌生,没有用过应该也听说过 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 简 ...
- js大数字转换,将大额数字转换为万、千万、亿等
代码 /** * 大数字转换,将大额数字转换为万.千万.亿等 * @param value 数字值 */ export function bigNumberTransform (value) { co ...