K-th string
这两天参加了hihocoder上的小竞赛,下面把自己做的记录一下!(最痛心的是,开始竟然把main函数,写成了mian,浪费了将近一个小时时间,伤不起啊)
Description
Consider a string set that each of them consists of {0, 1} only. All strings in the set have the same number of 0s and 1s. Write a program to find and output the K-th string according to the dictionary order. If such a string doesn’t exist, or the input is not valid, please output “Impossible”. For example, if we have two ‘0’s and two ‘1’s, we will have a set with 6 different strings, {0011, 0101, 0110, 1001, 1010, 1100}, and the 4th string is 1001.
Input
The first line of the input file contains a single integer t (1 ≤ t ≤ 10000), the number of test cases, followed by the input data for each test case.
Each test case is 3 integers separated by blank space: N, M(2 <= N + M <= 33 and N , M >= 0), K(1 <= K <= 1000000000). N stands for the number of ‘0’s, M stands for the number of ‘1’s, and K stands for the K-th of string in the set that needs to be printed as output.
Output
For each case, print exactly one line. If the string exists, please print it, otherwise print “Impossible”.
样例输入
3
2 2 2
2 2 7
4 7 47
样例输出
0101
Impossible
01010111011
这里给出我的答案
思路: 计算由N个0和M个1组成的数的最小值和最大值,然后判断从最小值开始,计算每个数包含一个的个数,到第K的时候,再将其转为包含N个0,和M个1的字符串,输出。(这是暂时想出的方法,以后会仔细思考一下,如果你有不同的方法,欢迎交流)
#include<iostream>
#include<string>
#include<vector>
#include<math.h>
using namespace std; int fac(int n)
{
if(n == )
return ;
else
return n*fac(n-);
}
int numOne(int value)
{
int res = ;
while(value)
{
if(value % == )
res++;
value = value /;
}
return res;
}
string outObj(int value,int len)
{
string res = "";
while(value)
{
if(value % == )
res.append("");
else
res.append("");
value = value / ;
}
reverse(res.begin(),res.end());
string app="";
for(int i=; i < len - res.size(); i++)
app.append("");
app.append(res);
return app;
}
int main()
{
int T;
cin>>T;
int M,N,K;
vector<int> result(T);
int minValue,maxValue;
for(int i=; i<T; i++)
{
cin>>N>>M>>K;
int len = M + N;
minValue=;
maxValue=;
if(fac(N+M)/(fac(N) * fac(M)) < K)
{
cout<<"Impossible"<<endl;
continue;
}
for(int j=; j<M; j++)
{
minValue = minValue + pow(, j);
}
for(int j=N; j<M+N; j++)
{
maxValue = maxValue + pow(, j);
}
int count = ;
int temp = ;
int obj = ;
for(int j = minValue; j <= maxValue; j++)
{
temp = numOne(j);
if(temp == M)
count++;
if(count == K)
{
obj = j;
break;
}
}
string res = outObj(obj,len);
cout<<res<<endl;
}
return ;
}
K-th string的更多相关文章
- [Swift]LeetCode358. 按距离为k隔离重排字符串 $ Rearrange String k Distance Apart
		
Given a non-empty string str and an integer k, rearrange the string such that the same characters ar ...
 - LC 358. Rearrange String k Distance Apart
		
Given a non-empty string s and an integer k, rearrange the string such that the same characters are ...
 - 剑指Offer面试题:27.最小的k个数
		
一.题目:最小的k个数 题目:输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 这道题是典型的TopK问题,其最简单的思路莫过于 ...
 - golang中string以及slice之间的一些问题
		
好记性不如烂笔头o_O slice切片不会开辟新的空间 a := []int{0,1,2,3} b := make([]int, 8) b = a[:] b[2] = 9 fmt.Println(a) ...
 - Symbols of String Pattern Matching
		
Symbols of String Pattern Matching in Introduction to Algorithms. As it's important to be clear when ...
 - String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
		
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
 - 关于string的练习题目
		
/*Are they equal*/#include<iostream>#include<string>using namespace std;int n;string dea ...
 - ruby 学习 -- string --1
		
# define french_string = "il \xc3\xa9tait une fois" long_string = <<EOF Here is a lo ...
 - java基础知识回顾之---java String final类普通方法
		
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
 - 两个string数组对应比较
		
最近做的array string类型对比.这个可能比较复杂,用的是linq 是请教别人的,我在这里记录一下 jquery 方法里面的数组 function arrtxt() { var arrt= [ ...
 
随机推荐
- how to Use the Tampermonkey API from the Chrome console
			
1.Create the following script: // ==UserScript== // @name Exports some GM functions // @namespace Wh ...
 - Dubbo OPS工具——dubbo-admin & dubbo-monitor
			
1. 前言 今年八月份的时候,查看github仓库,Dubbo OPS还提供了三种工具用于Dubbo的监控运维: 九月份,伴随着Dubbo的全面快速的升级,现在仓库里Dubbo OPS下这三个工具已经 ...
 - Android开发环境——SDK相关内容汇总
			
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
 - Selenium webdriver 获取属性值 元素里的value
			
1.WebElement webElemt= webElement.findElement(By.xpath("//*[@class='xxxxxx]/a")); //在ie下使用 ...
 - 用ElasticSearch存储日志
			
介绍 如果你使用elasticsearch来存储你的日志,本文给你提供一些做法和建议. 如果你想从多台主机向elasticsearch汇集日志,你有以下多种选择: Graylog2 安装在一台中心机上 ...
 - 神文章1:去年(2011)一年干了些啥? -vivo神人
			
评论: 来自豆瓣的vivo神人,之前不知道有着一号牛逼的人物,觉此人博学.有正义感,其中有一片文章述说了中国近代经济演变历史情况,于我感触很深.因时间关系,没通读,有时间一定读完(微博口水杂录简略看了 ...
 - webpack window 处理图片和其他静态文件
			
安装url-loader npm install url-loader --save-dev 配置config文件 { test: /\.(png|jpg)$/, load ...
 - C# WinForm给Button或其它控件添加快捷键响应
			
今天做东西遇到要给按钮添加快捷键.就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...
 - Swift 类
			
1.类概念 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里. 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法. 类是一个静态的概念,类本 ...
 - 如何利用 Visual Studio 自定义项目或工程模板(转载)
			
在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们 ...