We Got Everything Covered! - Codeforces Round 921 (Div. 2) A

中文题面

给你两个正整数 \(n\)\(k\)

您的任务是找出一个字符串 \(s\) ,使得所有可能的长度为 \(n\) 的字符串都可以用前 \(k\) 个小写英文字母作为 \(s\) 的子序列出现。

如果有多个答案,则打印长度最小的答案。如果仍有多个答案,可以打印其中任意一个。

注: 如果从 \(b\) 中删除一些字符(可能为零)而不改变其余字符的顺序即可得到 \(a\) ,则字符串 \(a\) 称为另一个字符串 \(b\) 的子串。

输入

第一行输入包含一个整数 \(t\) ( \(1\leq t\leq 676\) ),表示测试用例的数量。

每个测试用例包含一行输入,其中包含两个整数 \(n\) ( \(1\leq n\leq 26\) ) 和 \(k\) ( \(1\leq k\leq 26\) )。

输出

对于每个测试用例,打印一行包含满足上述属性的字符串 \(s\) 。如果有多个答案,打印长度最小的一个。如果仍有多个答案,则打印其中任意一个。

样例

4
1 2
2 1
2 2
2 3
ab
aa
baab
abcbac

对于第一个测试用例,有两个长度为 \(1\) 的字符串,可以用前 \(2\) 个小写英文字母组成,它们作为子序列出现在 \(s\) 中,如下所示:

\[\texttt{a}: {\color{red}{\texttt{a}}}\texttt{b} \]

\[\texttt{b}: \texttt{a}{\color{red}{\texttt{b}}} \]

对于第二个测试用例,只有一个长度为 \(2\) 的字符串可以用第一个小写英文字母组成,它作为子序列出现在 \(s\) 中,如下所示:

\[\texttt{aa}: {\color{red}{\texttt{aa}}} \]

对于第三个测试用例,有长度为 \(2\)\(4\) 个字符串可以用第一个 \(2\) 小写英文字母组成,它们作为子序列出现在 \(s\) 中,如下所示:

\[\texttt{aa}: \texttt{b}{\color{red}{\texttt{aa}}}\texttt{b} \]

\[\texttt{ab}: \texttt{ba}{\color{red}{\texttt{ab}}} \]

\[\texttt{ba}: {\color{red}{\texttt{ba}}}\texttt{ab} \]

\[\texttt{bb}: {\color{red}{\texttt{b}}}\texttt{aa}{\color{red}{\texttt{b}}} \]

对于第四个测试用例,有长度为 \(2\)\(9\) 个字符串可以用第一个 \(3\) 个小写英文字母组成,它们作为子序列出现在 \(s\) 中,如下所示:

\[\texttt{aa}: {\color{red}{\texttt{a}}}\texttt{bcb}{\color{red}{\texttt{a}}}\texttt{c} \]

\[\texttt{ab}: {\color{red}{\texttt{ab}}}\texttt{cbac} \]

\[\texttt{ac}: \texttt{abcb}{\color{red}{\texttt{ac}}} \]

\[\texttt{ba}: \texttt{abc}{\color{red}{\texttt{ba}}}\texttt{c} \]

\[\texttt{bb}: \texttt{a}{\color{red}{\texttt{b}}}\texttt{c}{\color{red}{\texttt{b}}}\texttt{ac} \]

\[\texttt{bc}: \texttt{a}{\color{red}{\texttt{bc}}}\texttt{bac} \]

\[\texttt{ca}: \texttt{ab}{\color{red}{\texttt{c}}}\texttt{b}{\color{red}{\texttt{a}}}\texttt{c} \]

\[\texttt{cb}: \texttt{ab}{\color{red}{\texttt{cb}}}\texttt{ac} \]

\[\texttt{cc}: \texttt{ab}{\color{red}{\texttt{c}}}\texttt{ba}{\color{red}{\texttt{c}}} \]

题目思路

这道题目是一道贪心题,由于这道题的答案不唯一,所以等同于开启了 \(SPJ\)

那么,这道题的解法就有很多种,比如样例就可以是这样的:

4
1 2
2 1
2 2
2 3
ab
aa
baab
cbaabc

根据上方样例,我们发现,对于这道题目,我们只需要顺倒交替输出前 \(k\) 个字母共 \(n\) 次即可!

AC Code:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		int n,k;
		scanf("%d%d",&n,&k);
		for(int j=1;j<=n;j++)
		{
			for(int x=0;x<k;x++)
			{
				if(j%2==0)printf("%c",(char)(x+'a'));
				else printf("%c",(char)(k-x-1+'a'));
			}
		}
		printf("\n");
	}
	return 0;
}
posted @ 2024-01-28 12:06  Cheerimy  阅读(197)  评论(0)    收藏  举报