传送门
题意
给出一个正整数n,需要构造一个由n-2个a和2个b的字符串,例如n=5,字符串按以下规律排序。
1.aaabb
2.aabab
3.aabba
4.abaab
5.ababa
6.abbaa
7.baaab
8.baaba
9.babaa
10.bbaaa
再给出一个k,需要输出第k个字符串。
思路
根据题意,我们让第一个b向前移动,第二个b随着k和i的变化而变化。
AC代码
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=1e5;
char str[MAXN];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,k;
scanf("%d%d",&n,&k);
int i,j;//i表示第一个b的位置,j代表第二个b的位置
for(i=n-1;i>=1;i--){
if(k>n-i) k-=n-i;
else{
j=n+1-k;
break;
}
}
for(int pos=1;pos<=n;pos++)
printf("%c",i==pos||j==pos?'b':'a');
puts("");
}
return 0;
}