We Got Everything Covered! - Codeforces Round 921 (Div. 2) A
中文题面
给你两个正整数 和 。
您的任务是找出一个字符串 ,使得所有可能的长度为 的字符串都可以用前 个小写英文字母作为 的子序列出现。
如果有多个答案,则打印长度最小的答案。如果仍有多个答案,可以打印其中任意一个。
注: 如果从 中删除一些字符(可能为零)而不改变其余字符的顺序即可得到 ,则字符串 称为另一个字符串 的子串。
输入
第一行输入包含一个整数 ( ),表示测试用例的数量。
每个测试用例包含一行输入,其中包含两个整数 ( ) 和 ( )。
输出
对于每个测试用例,打印一行包含满足上述属性的字符串 。如果有多个答案,打印长度最小的一个。如果仍有多个答案,则打印其中任意一个。
样例
4
1 2
2 1
2 2
2 3
ab
aa
baab
abcbac
注
对于第一个测试用例,有两个长度为 的字符串,可以用前 个小写英文字母组成,它们作为子序列出现在 中,如下所示:
对于第二个测试用例,只有一个长度为 的字符串可以用第一个小写英文字母组成,它作为子序列出现在 中,如下所示:
对于第三个测试用例,有长度为 的 个字符串可以用第一个 小写英文字母组成,它们作为子序列出现在 中,如下所示:
对于第四个测试用例,有长度为 的 个字符串可以用第一个 个小写英文字母组成,它们作为子序列出现在 中,如下所示:
题目思路
这道题目是一道贪心题,由于这道题的答案不唯一,所以等同于开启了 !
那么,这道题的解法就有很多种,比如样例就可以是这样的:
4
1 2
2 1
2 2
2 3
ab
aa
baab
cbaabc
根据上方样例,我们发现,对于这道题目,我们只需要顺倒交替输出前 个字母共 次即可!
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】