题目大意:给定字符串 s 和整数 k,通过两个操作使得 s 成为长度为 k 的字符串,并且得到的字符串字典序最小。
两个操作分别是:
1.删除 s 末尾的一个字符
2. s 自增,即 s += s
总结:循环中取模下标太妙了,达到了重复利用前缀的效果。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5, mod = 1e9 + 7;
int main ()
{
int n, k;
string s;
int ans = 1;
cin >> n >> k >> s;
for (int i = 1; i < n; i++) {
if (s[i] > s[i % ans]) break;
else if (s[i] < s[i % ans]) ans = i + 1;
}
for (int i = 0; i < k; i++) cout << s[i % ans];
return 0;
}
该博客讨论了一种编程问题,涉及对给定字符串s和整数k进行特定操作,目标是使s变成长度为k的字符串并保持字典序最小。主要操作包括删除末尾字符和字符串自增。博主分享了一个高效的解决方案,通过检查字符串的前缀来确定最佳操作,从而达到最小字典序。代码示例中展示了如何实现这一算法。
307

被折叠的 条评论
为什么被折叠?



