题意:以最短的长度构造至少k个"codeforces"字串。
题解:字串个数为各字母的个数之积,可以发现,当不同字母个数不唯一时可以以较小的长度达到较多的个数,故构造兼顾所有字母,即一轮一轮添加"codeforces",每加一个字母,个数之积和k比较,大于作为边界条件。注意题目是至少k个,不固定k个。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
char s[15] = {"codeforces"};
int a[15];//第i个位置上字符个数
int main()
{
vector<char>v[15];
ll k, i, j, sum = 1, m = 0;cin >> k;
if (k == 1) cout << s << endl;
else{
while (sum < k){
sum = 1;
v[m].push_back(s[m]), a[m]++;//第m位字符添加到第m个位置,同时个数加一
m == 9 ? m = 0 : m++;
for (i = 0; i < 10; i++)
sum *= a[i];
}
for (i = 0; i < 10; i++)
for (j = 0; j < v[i].size(); j++)
cout << v[i][j];
cout << endl;
}
}