2018.07.20 atcoder Largest Smallest Cyclic Shift(贪心)

传送门
题意:给你x个a,y个b,z个c,显然这些字符可以拼成若干字符串,然后求这些字符串中最小表示法表示出来的最大的那一个。

解法:贪心思想,用multiset维护现在拼成的字串,每次取一个最小的和一个最大的拼在一起,最后剩下的就是答案。

代码如下:

#include
using namespace std;
int a,b,c;
multiset<string>s;
int main(){
    scanf("%d%d%d",&a,&b,&c);
    for(int i=1;i<=a;++i)s.insert("a");
    for(int i=1;i<=b;++i)s.insert("b");
    for(int i=1;i<=c;++i)s.insert("c");
    while(s.size()>1){
        string ss=*s.begin()+*--s.end();
        s.erase(s.begin());
        s.erase(--s.end());
        s.insert(ss);
    }
    cout<<*s.begin();
    return 0;
}

你可能感兴趣的:(#,贪心,#,最小表示法)