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

中文题面

给你两个正整数 nk

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

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

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

输入

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

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

输出

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

样例

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

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

a:ab

b:ab

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

aa:aa

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

aa:baab

ab:baab

ba:baab

bb:baab

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

aa:abcbac

ab:abcbac

ac:abcbac

ba:abcbac

bb:abcbac

bc:abcbac

ca:abcbac

cb:abcbac

cc:abcbac

题目思路

这道题目是一道贪心题,由于这道题的答案不唯一,所以等同于开启了 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 @   Cheerimy  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示