洛谷 P3048 [USACO12FEB]牛的IDCow IDs
题目描述
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.
输出格式:
输入输出样例
- 7 3
- 10110
- 题解:
20暴力
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- int n,k,pos,a[];
- int main(){
- scanf("%d%d",&n,&k);
- for(int i=;i<=+k;i++)a[i]=;
- pos=;
- for(int i=;i<=n;i++){
- int p;
- for(int j=+k;j>=pos-;j--)
- if(a[j]==&&a[j+]==){
- p=j+;break;
- }
- if(p==pos){
- pos--;memset(a,,sizeof(a));
- a[pos]=;
- for(int j=+k;j>=;j--)a[j]=;
- }else {
- a[p]=;a[p-]=;
- }
- }
- for(int i=pos;i<=+k;i++)
- printf("%d",a[i]);
- return ;
- }
完全不懂这个AC代码
在洛谷上问了写这个代码的大佬..今天大佬给我讲了一下!
太神啦!这个题的题解网上都是一坨..(*゜ロ゜)ノ实在不愿意看..
(逃ヽ(゚∀゚*)ノ━━━ゥ♪
a[i]表示的是第i个1的位置,初始值为(按阳历来说)第一个1的位置是1,第二个
1的位置是2,第三个1的位置是3.二进制也就是1 1 1 。
我们开始找啦,样例是升序的第7个,我把1--7都列出来。
1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
1 0 0 1 1
1 0 1 0 1
1 0 1 1 0
发现的规律是,每次将二进制串的从右往左数的第1个前面为0的1往左移一位。
这个1右边的1全部靠后。因为二进制串的大小取决于1的位置,尽量别让高位有1。
然后我们从右往左找那个能移动的1吧。能移动的条件是,当前1的位置+1不等于
下一个1的位置,也就是前面是空的。然后就这样啊....
高质量的模拟确实应该学习一下...
代码:
- #include<cstdio>
- using namespace std;
- int n,k,j;
- int a[];
- int main(){
- scanf("%d%d",&n,&k);
- for(int i=;i<=k;i++)a[i]=i;
- for(int i=;i<=n;i++){
- j=;
- while(){
- a[j]++;
- if(a[j]!=a[j+])break;
- a[j]=j;
- j++;
- }
- }
- j=k;
- for(int i=a[k];i>=;i--){
- if(a[j]==i)printf(""),j--;
- else printf("");
- }
- return ;
- }
洛谷 P3048 [USACO12FEB]牛的IDCow IDs的更多相关文章
- 洛谷P3048 [USACO12FEB]牛的IDCow IDs
P3048 [USACO12FEB]牛的IDCow IDs 12通过 67提交 题目提供者lin_toto 标签USACO2012 难度普及/提高- 时空限制1s / 128MB 提交 讨论 题解 ...
- LUOGU P3048 [USACO12FEB]牛的IDCow IDs(组合数)
传送门 解题思路 组合数学.首先肯定是要先枚举位数,假如枚举到第\(i\)位.我们可以把第一位固定,然后那么后面的随意放\(1\),个数就为\(C_{i-1}^{k-1}\).然后每次枚举时如果方案\ ...
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- [USACO12FEB]牛的IDCow IDs
题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...
- [USACO12FEB]牛的IDCow IDs 一题多解(求二进制中有k个1 ,第n大的数)
题目: FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头.FJ按升序编号,第一个编号是由K个"1&q ...
- 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game
洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...
- 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
- 洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup
https://www.luogu.org/problem/show?pid=3029 题目描述 Farmer John has hired a professional photographer t ...
- 洛谷P3047 [USACO12FEB]Nearby Cows(树形dp)
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
随机推荐
- 编译android源码m、mm、mmm命令的使用
http://blog.163.com/zz_forward/blog/static/212898222201442873435471/ gcc怎么查看它的默认include路径和库的路径呢? //- ...
- SOA 面向服务架构 阅读笔记(五)
14 SOA 服务管理器 契约:契约中必须明确定义双方的责任,否则就会产生混乱. SOA可以管理端到端的流程. IT技术一直是与业务对齐的. 14.1.1 分解IT层 业务服务层 管道层 硬件层 管道 ...
- PHP递归和非递归遍历文件夹下文件
function readDirFiles($dir){ $files= []; $queue=[realpath($dir)]; $currentPath = current($queue); wh ...
- Cocos2d-x项目移植到WP8系列之七:中文显示乱码
原文链接:http://www.cnblogs.com/zouzf/p/3984628.html C++和C#互调时经常会带一些参数过去例如最常见的字符串,如果字符串里有中文的话,会发现传递过去后变成 ...
- iOS_AutoLayout自动布局
目录: 一.什么是AutoLayout? 二.创建autoLayout的方法 三.VFL语言 一.什么是AutoLayout? Autolayout是一种“自动布局”技术,专门用来布局UI界面 ...
- INSPIRED启示录 读书笔记 - 第19章 用户体验设计与实现
先定义用户体验再动手开发 在软件开发过程中,有很多工作可以同时进行.比如,需求调研和产品设计(用户体验设计).开发与测试 尽管如此,用户体验设计和软件开发就不能同时进行,原因有五点 1.与软件开发团队 ...
- Spring的AOP面向切面编程
什么是AOP? 1.AOP概念介绍 所谓AOP,即Aspect orientied program,就是面向方面(切面)的编程. 功能: 让关注点代码与业务代码分离! 关注点: 重复代码就叫做关注点: ...
- CentOS 7(64位) 下Docker的安装
系统要求是64位,内核版本至少3.10. 首先添加yum软件源: 之后更新yum软件源缓存,并安装docker-engine 查看docker 版本: Cannot connect to the Do ...
- 泛型学习第二天——C#中的List<string>泛型类示例
在C#代码中使用一系列字符串(strings)并需要为其创建一个列表时,List<string>泛型类是一个用于存储一系列字符串(strings)的极其优秀的解决办法.下面一起有一些Lis ...
- Java中interface是否继承Object类
首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...