1. 程式人生 > >2018.07.20 atcoder Largest Smallest Cyclic Shift(貪心)

2018.07.20 atcoder Largest Smallest Cyclic Shift(貪心)

傳送門
題意:給你x個a,y個b,z個c,顯然這些字元可以拼成若干字串,然後求這些字串中最小表示法表示出來的最大的那一個。

解法:貪心思想,用multiset維護現在拼成的字串,每次取一個最小的和一個最大的拼在一起,最後剩下的就是答案。

程式碼如下:

#include<bits/stdc++.h>
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; }