题解:CF2252B Always Changing
洛谷链接
Codeforces 链接
Vjudge 链接
题目简述
给定一个由
代码思路
首先计算出原串中
\color{green}\text{AC Code}
#include <cstdio>
#include <string>
#include <algorithm>
void solve() {
int n, k;
scanf("%d%d", &n, &k);
int rem = n & 1;
std::string s;
int one = n >> 1;
int zero = one + rem;
int max_k = (one - 1) + (zero - 1);
if (max_k < k) {
puts("-1");
return;
}
int m = n - k;
int odd_cnt = (m + 1) >> 1;
int even_cnt = m >> 1;
s.resize(n);
int pos = 0;
char odd_char = '0', even_char = '1';
int cnt0 = zero, cnt1 = one;
if (cnt0 < odd_cnt || cnt1 < even_cnt) {
std::swap(odd_char, even_char);
std::swap(cnt0, cnt1);
}
int odd = cnt0 - odd_cnt;
int even = cnt1 - even_cnt;
for (int i = 1; i <= m; ++i) {
int len = 1;
if (i == 1) len += odd;
if (i == 2) len += even;
char ch = (i & 1) ? odd_char : even_char;
for (int j = 0; j < len; ++j)
s[pos++] = ch;
}
printf("%s\n", s.c_str());
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}