题面如下:
题意简说
给你一个 n n n and k k k
构建用 c h a r ( ′ a ′ + 0 ) c h a r ( ′ a ′ + k − 1 ) char('a' + 0) ~ char('a' + k - 1) char(′a′+0) char(′a′+k−1) 去构建一个长度为 n n n 的字符串 && 该字符串的花费最小
花费的定义: s i = = s j a n d s i + 1 = = s j + 1 s_i == s_j \ and \ s_{i+1} == s_{j + 1} si==sj and si+1==sj+1 1 ≤ i < j < ∣ s ∣ 1\le i < j <|s| 1≤i<j<∣s∣ 的个数
构建方法 or 思路
观察样例
aabacadbb
我们可以发现似乎有构造规律
a ab ac ad b bb bc bd…
如果我们以这样的形式去构造,那么一定是最优的!!!
还发现什么?
:存在循环节
AC代码如下:
int n, k;
char ans[N];
void solve()
{
cin >> n >> k;
int idx = 0;
for (int i = 0; i < k; i++)
{
ans[idx++] = 'a' + i;
for (int j = i + 1; j < k; j++)
{
ans[idx++] = 'a' + i;
ans[idx++] = 'a' + j;
}
}
for (int i = 0; i < n; i++)
cout << ans[i % idx];
cout << '\n';
}