码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷P3048 [USACO12FEB]牛的IDCow IDs

时间:2017-09-22 19:11:43      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:none   close   opened   bre   输入   isp   swa   binary   geek   

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.

 

输出格式:

 

输入输出样例

输入样例#1:
7 3 
输出样例#1:
10110 
技术分享
/*
    将串倒着存储
    枚举每个编号对应的二进制串
    如果还存在10子串,就swap
    如果不再存在,就加一位 
*/
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,l;
bool bin[100000000];
int main(){
    scanf("%d%d",&n,&m);
    l=m;
    for(int i=1;i<=m;i++)bin[i]=1;
    for(int i=2;i<=n;i++){//从头枚举 
        bool flag=0;
        for(int j=1;j<l;j++){
            if(bin[j]==1&&bin[j+1]==0){
                flag=1;
                bin[j]=0;bin[j+1]=1;
                break;
            }
        }
        if(!flag){
            for(int j=1;j<m;j++)bin[j]=1;
            for(int j=m;j<=l;j++)bin[j]=0;
            l++;bin[l]=1;
        }
    }
    for(int i=l;i>=1;i--)printf("%d",bin[i]);
}
30分 暴力 不知道为什么WA了三个点

 

洛谷P3048 [USACO12FEB]牛的IDCow IDs

标签:none   close   opened   bre   输入   isp   swa   binary   geek   

原文地址:http://www.cnblogs.com/thmyl/p/7576340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!