题目链接
题意:已知合并两个字符串的价值为各自字符串中的字符在另一个字符串中出现的次数想乘,求能等于n价值的字符串。如 ‘aa’ ‘aa’ 为 2*2=4;
思路:手算可得, 最后的价值与合并顺序无关’a’ ‘a’ ‘a’ ‘a’ 不论怎么和都是6。只和字符出现次数有关, 且符合等差数列的求和公式。所以枚举每个字符出现次数即可。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
typedef long long LL;
const int MAXN=100005;
void solve(int n)
{
int cnt=0;
int sum=0;
if(n==0)
{
printf("a\n");
return;
}
while(sum<n)
{
int i=1;
printf("%c", cnt+'a');
while(i*(i+1)/2+sum<=n)
{
i++;
printf("%c", cnt+'a');
}
cnt++;
sum+=(i)*(i-1)/2;
}
cout<<endl;
}
int main()
{
int n;
while(~scanf("%d", &n))
solve(n);
return 0;
}