【每日一题】Problem 44E. Anfisa the Monkey
解决思路
由题意可得 \(ak \le size \le bk\),因此当条件不符合该要求时即可退出
因为 \(size \le bk\),因此,我们可以假设每行都是 \(b\) 长度来满足条件二,因此第 \(i\) 行的长度为 \(len = size - (k-i)b\),然后对 \(len\) 取与 \(a\) 中的较大者来满足条件一
注意,如果后续行每行都取最大值 \(b\),可能会导致 \(len \lt 0\),这表明后续行无法每行都取 \(b\) 长度(条件二成立),同时 \(len = max(len, a)\) 又保证了条件一的成立,因此结果符合要求
#include <bits/stdc++.h>
int main() {
int k, a, b; std::cin >> k >> a >> b;
std::string letters; std::cin >> letters;
if (k * a > letters.size() || k * b < letters.size()) {
std::cout << "No solution\n";
} else {
int pos, len, size;
pos = len = 0, size = letters.size();
for (int i = 1; i <= k; ++i) {
len = size - (k - i) * b;
len = std::max(a, len);
std::cout << letters.substr(pos, len) << std::endl;
size -= len;
pos += len;
}
}
return 0;
}
本文来自博客园,作者:HelloEricy,转载请注明原文链接:https://www.cnblogs.com/HelloEricy/p/17476176.html