[codeforces1158B]The minimal unique substring

time limit per test : 1 second
memory limit per test : 256 megabytes

Let s be some string consisting of symbols “0” or “1”. Let’s call a string t a substring of string s, if there exists such number 1 ≤ l ≤ ∣ s ∣ − ∣ t ∣ + 1 1≤l≤|s|−|t|+1 1lst+1 that t = s l s l + 1 … s l + ∣ t ∣ − 1 t=s_ls_{l+1}…s_{l+|t|−1} t=slsl+1sl+t1. Let’s call a substring t t t of string s s s unique, if there exist only one such l l l.

For example, let s s s=“1010111”. A string t t t=“010” is an unique substring of s s s, because l l l=2 is the only one suitable number. But, for example t=“10” isn’t a unique substring of s s s, because l l l=1 and l l l=3 are suitable. And for example t t t=“00” at all isn’t a substring of s s s, because there is no suitable l l l.

Today Vasya solved the following problem at the informatics lesson: given a string consisting of symbols “0” and “1”, the task is to find the length of its minimal unique substring. He has written a solution to this problem and wants to test it. He is asking you to help him.

You are given 2 positive integers n n n and k k k, such that ( n (n (n m o d mod mod 2 ) = ( k 2)=(k 2)=(k m o d mod mod 2 ) 2) 2), where ( x (x (x m o d mod mod 2 ) 2) 2) is operation of taking remainder of x by dividing on 2. Find any string s consisting of n symbols “0” or “1”, such that the length of its minimal unique substring is equal to k k k.

Input

The first line contains two integers n n n and k k k, separated by spaces ( 1 ≤ k ≤ n ≤ 100000 , ( k (1≤k≤n≤100000, (k (1kn100000,(k m o d mod mod 2 ) = ( n 2)=(n 2)=(n m o d mod mod 2 ) ) 2)) 2)).

Output

Print a string s s s of length n n n, consisting of symbols “0” and “1”. Minimal length of the unique substring of s s s should be equal to k k k. You can find any suitable string. It is guaranteed, that there exists at least one such string.

Examples
Input

4 4

Output

1111

Input

5 3

Output

01010

Input

7 3

Output

1011011

Note

In the first test, it’s easy to see, that the only unique substring of string s=“1111” is all string s, which has length 4.

In the second test a string s=“01010” has minimal unique substring t=“101”, which has length 3.

In the third test a string s=“1011011” has minimal unique substring t=“110”, which has length 3.

题意:
给定两个数字 n , k n,k n,k,他们奇偶性相同,要求构造一个长度为 n n n的01串 s s s,使得 s s s所有长度小于 k k k的子串在 s s s中都不止出现一次。保证有解。

题解:
首先我们设 l = ( n − k ) / 2 l=(n-k)/2 l=(nk)/2
因为解一定存在,而且必定为 s l + 1 . . . s n − l s_{l+1}...s_{n-l} sl+1...snl
那么接下来就很好理解了,这样如下划分可以让 1 1 1 k − 1 k-1 k1长度的字符串都出现重复。
我们只要在每个 ( ( n − k ) / 2 + 1 ) ∗ q ( q > = n ) ((n-k)/2+1)*q (q>=n) ((nk)/2+1)q(q>=n)处放置一个0其他位置都是1即可。

#include<bits/stdc++.h>
#define LiangJiaJun main
using namespace std;
int n,k;
int LiangJiaJun(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		printf("%d",(i%((n-k)/2+1)>0));
	}
	puts("");
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值