题目链接:点击打开链接
题意:你有一种神奇的力量,给出一个n,表示你使用这种力量的总花费。你这种神奇的力量可以把任意两个字符串连接起来。花费为 Σ 第一个字符串某个字母的个数*第二个字符串某个字母的个数(某个字母的范围i是a~z)。让输出你使用力量的花费为n的字符串。
题解:我们手推几组样例就会知道,每当我们制造字符串时,一直加和之前相同的字母时,花费为 依次为0到(1+n)*n/2.放不同字母时,从新从0开始累加。所以我们只需要不断的枚举每个字母的最大(1+n)*n/2就行。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 5e7+5;
char a[maxn];
int main(){
int n;
cin >> n;
int ans = 0;
for(int i = 0 ; i < 26 ; i ++){
int cnt = 0;
while(cnt <= n){
a[ans++] = i+'a';
n -= cnt;
cnt++;
}
if(n == 0)
break;
}
cout << a << endl;
}