贪心水题,AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
struct node {
int need,temp;
char ch;
bool operator<(const node&a)const {
return ceil((double)need/temp)<ceil((double)a.need/a.temp);//使用ceil函数时一定要将int强制转换为浮点型
}
} p[101];
void init() {
for(int i=0; i<=100; i++)p[i].need=0,p[i].temp=1;
}
priority_queue<node>q;
vector<char>ans;
int main() {
init();
string s;
int x;
cin>>s>>x;
for(int i=0; i<s.size(); i++) p[s[i]-'a'].need++,p[s[i]-'a'].ch=s[i];
for(int i=0; i<=30; i++) {
if(p[i].need) {
q.push(p[i]);
ans.push_back(i+'a');
//cout<<p[i].need<<" "<<p[i].ch<<endl;
}
}
//cout<<ans.size()<<endl;
if(x<ans.size()) {
cout<<-1<<endl;
return 0;
}
int ii=ans.size();
for(int i=ii+1; i<=x; i++) {
if(q.size()) {
node aa=q.top();
q.pop();
ans.push_back(aa.ch);
aa.temp++;
q.push(aa);
}
}
node bb=q.top();
cout<<ceil((double)bb.need/bb.temp)<<endl;//<<" "<<bb.need<<" "<<bb.temp<<" "<<bb.ch<<endl;;
for(int i=0; i<ans.size(); i++)cout<<ans[i];
}