【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 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走, ...
随机推荐
- Vue $nextTick的一个使用场景
$nextTick 官方解释 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM 使用场景 在页面上有2个表单元素和2个按钮 btnRequiredFi ...
- Flutter 容器 (2) - Padding
Padding: 内边距Widget,与CSS中的padding相似. import 'package:flutter/material.dart'; class AuthList extends S ...
- 在java中,怎样创建编写javascript的环境?
刚开始还没有学到这一块的时候,预习的时候也是在网上搜索这一类的信息时候, 可是都是八竿子碰不到边的!在此也是呕心沥血的为读者献上最好的: 1.首先:点击空白处>右键>project: 2. ...
- 对拍(C++)
对拍(C++) 对拍是什么 众所周知,当我们正在考试敲代码的时候,每一道题,都会有某种正解能拿到满分:当我们想不出正解时,我们往往可以打暴力代码来骗分. 但是,当我们有思路写正解,但又担心自己 ...
- Tun/Tap接口使用指导
Tun/Tap接口指导 目录 Tun/Tap接口指导 概述 工作机制 创建接口 举例 简单的程序 隧道 拓展 参考 概述 对tun接口的了解需求主要来自于openshift的网络,在openshift ...
- python列表的增删改查和嵌套
列表 python常用的数据类型 可承载任意的数据类型 列表是有序的,可索引.切片(步长) 列表的创建 list1 = [1, 2, 'whll'] #1. list2 = list() #2. #3 ...
- css3 属性 text-overflow 实现截取多余文字内容 以省略号来代替多余内容
css3 属性 text-overflow: ellipsis 前言 正文 结束语 前言 我们在设计网站的时候有时会遇到这样一个需求:因为页面空间大小的问题,需要将多余的文字隐藏起来,并以省略号代替, ...
- sudo 提权漏洞(CVE-2019-14287)复现
(该文参考网络他人资料,仅为学习,不许用于非法用途) 一.环境 1.sudo版本小于1.8.28的Linux系统 2.sudo 是Linux系统命令,让普通账号以root身份去执行某些命令,比如:安装 ...
- neutron plugin 与 extension 编写流程
原文链接:neutron plugin 与 extension 编写流程 参考: 怎样写 OpenStack Neutron 的 Plugin (一)怎样写 OpenStack Neutron 的 P ...
- 使用 C# 捕获进程输出
使用 C# 捕获进程输出 Intro 很多时候我们可能会需要执行一段命令获取一个输出,遇到的比较典型的就是之前我们需要用 FFMpeg 实现视频的编码压缩水印等一系列操作,当时使用的是 FFMpegC ...