D. Min Cost String
题意
一个字符串的权值等于同时满足 s i = s j s_i=s_j si=sj 和 s i + 1 = s j + 1 s_{i + 1} = s_{j + 1} si+1=sj+1 的索引对的数量。请用 k k k 的字母构造长度为 n n n 的最小权值字符串。
题解
- 可以用 k k k 字母构造长度为 k ⋅ k k \cdot k k⋅k 的权值为 0 0 0 的字符串;
- 如果 k ⋅ k < n k \cdot k < n k⋅k<n ,那么复制前面的字符串即可。
代码
#include<bits/stdc++.h>
#define rep(i, a, n) for (int i = a; i <= n; ++i)
#define per(i, a, n) for (int i = n; i >= a; --i)
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 5;
int main() {
int n, k;
scanf("%d%d", &n, &k);
string ans;
rep(i, 0, k - 1) {
ans += char(i + 'a');
rep(j, i + 1, k - 1) {
ans += char(i + 'a');
ans += char(j + 'a');
}
}
while (ans.size() < n) ans += ans;
ans.resize(n);
cout << ans << endl;
return 0;
}