[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;
}
### 关于 Codeforces 1853B 的题解与实现 尽管当前未提供关于 Codeforces 1853B 的具体引用内容,但可以根据常见的竞赛编程问题模式以及相关算法知识来推测可能的解决方案。 #### 题目概述 通常情况下,Codeforces B 类题目涉及基础数据结构或简单算法的应用。假设该题目要求处理某种数组操作或者字符串匹配,则可以采用如下方法解决: #### 解决方案分析 如果题目涉及到数组查询或修改操作,一种常见的方式是利用前缀和技巧优化时间复杂度[^3]。例如,对于区间求和问题,可以通过预计算前缀和数组快速得到任意区间的总和。 以下是基于上述假设的一个 Python 实现示例: ```python def solve_1853B(): import sys input = sys.stdin.read data = input().split() n, q = map(int, data[0].split()) # 数组长度和询问次数 array = list(map(int, data[1].split())) # 初始数组 prefix_sum = [0] * (n + 1) for i in range(1, n + 1): prefix_sum[i] = prefix_sum[i - 1] + array[i - 1] results = [] for _ in range(q): l, r = map(int, data[2:].pop(0).split()) current_sum = prefix_sum[r] - prefix_sum[l - 1] results.append(current_sum % (10**9 + 7)) return results print(*solve_1853B(), sep='\n') ``` 此代码片段展示了如何通过构建 `prefix_sum` 来高效响应多次区间求和请求,并对结果取模 \(10^9+7\) 输出[^4]。 #### 进一步扩展思考 当面对更复杂的约束条件时,动态规划或其他高级技术可能会被引入到解答之中。然而,在没有确切了解本题细节之前,以上仅作为通用策略分享给用户参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值