http://www.ifrog.cc/acm/problem/1171
题意:给定一个字符串,重排列该字符串中的字符,使得:1.该字符串为最小表示法 2.该字符串的字典序尽可能大。
题解:
E
Atcoder上的那个题的做法,可以DP……
但是比赛中,不少人想出了一个非常简介的贪心做法。
将所有字母作为一个字母的字符串放进一个multiset,每次取出其中第一个字符串和最后一个字符串,将他们连接放回multiset
最后剩下一个字符串便是答案。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() { 4 multiset<string> se; 5 string s; 6 cin >> s; 7 for(char c: s) { 8 stringstream st; 9 st << c; 10 se.insert(st.str()); 11 } 12 while(se.size() > 1) { 13 string a = *se.begin(), b = *se.rbegin(); 14 se.erase(se.begin()); 15 se.erase(--se.end()); 16 se.insert(a+b); 17 } 18 cout << *se.begin() << endl; 19 return 0; 20 }
10.29,CCPC秦皇岛站,恭祝茅菊苣队再次摘金,恭祝我锐夺银,恭祝NEU大二神牛摘金!我好菜啊.jpg