C. Phoenix and Distribution(贪心&字符串)
算法:贪心
题意:将长度为的字符串分成个子序列(每个字母只使用一次),将字典序最大的子序列最小化。
思路:显然可以对字符串进行排序后再分配,根据贪心思想,每个子序列尽可能占用少的字典序小的字母。
于是有 :
对于情况,若,显然是平均分配最好,否则将其全部分配给是最优的。
此种情况显然是最好的。
此种情况显然是最优的。
AC代码:
#include<cstdio> #include<iostream> #include<string> #include<algorithm> using namespace std; int main(){ int t,n,k; cin>>t; while(t--){ int n,k; string s; cin>>n>>k>>s; sort(s.begin(),s.end()); if(s[0]!=s[k-1]){ //pos1 cout<<s[k-1]<<endl; continue; } cout<<s[0]; if(s[k]!=s[n-1]) //pos2 for(int i=k;i<n;i++) cout<<s[i]; else cout<<s.substr(k,(n-1)/k); cout<<endl; } }