Educational Codeforces Round 107 (Rated for Div. 2) D. Min Cost String

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 kk 的权值为 0 0 0 的字符串;
  • 如果 k ⋅ k < n k \cdot k < n kk<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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43860866/article/details/117754129