题意:给定一个n,求一个含有n个字符的字符串。要求这个字符串有n-2个a和2个b,总共有n*(n-1)/2种排列方式,依照例子中的排列规则,给定k,输出第k种排列的字符串。
题解:这是一道找规律的题目,和字符串似乎没太大关系2333
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define INF 0x3f3f3f3f
const int N=2e6+50;
ll n;
ll a[N];
void init()
{
memset(a,0,sizeof(a));
int ans=0;
for(int i=1;i<=N;i++)
{
ans+=i;
a[i]=ans;
}
a[0]=0;
}
int main()
{
int t,k;
init();
cin>>t;
while(t--)
{
cin>>n>>k;
int tt,x=0,y=0,b;
for(int i=1;i<=N;i++)
{
if(k==a[i])
{
if(i==1)
x=n-1,y=n;
else
x=n-i,y=n-(k-a[i-1]-1);
break;
}
if(k>a[i]&&k<a[i+1])
{
tt=i+1;
b=a[i];
// cout<<a[i]<<endl;
break;
}
}
if(x==0&&y==0)
x=n-tt,y=n-(k-b-1);
// cout<<x<<y<<endl;
for(int i=1;i<=n;i++)
{
if(i==x||i==y)
cout<<"b";
else
cout<<"a";
}
cout<<endl;
}
return 0;
}