1. 程式人生 > >[Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift

[Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift

can esp using ins str small highlight div turn

題目大意:
給你\(A\)個a,\(B\)個b,\(C\)個c,要你構造一個字符串,使它的最小循環表示法最大。求這個表示法。
解題思路:
不知道怎麽證,但把a、b、c當做單獨的字符串扔進容器,每次把字典序最小的和字典序最大的兩個字符串合並就是答案。
容器用multiset即可。

C++ Code:

#include<cstdio>
#include<set>
#include<string>
using namespace std;
multiset<string>s;
int main(){
	int aa,bb,cc,p=0;
	scanf("%d%d%d",&aa,&bb,&cc);
	p=aa+bb+cc;
	for(;aa--;)s.insert("a");
	for(;bb--;)s.insert("b");
	while(cc--)s.insert("c");
	while(--p){
		auto st=(*s.begin())+*(--s.end());
		s.erase(s.begin());
		s.erase(--s.end());
		s.insert(st);
	}
	puts((*s.begin()).c_str());
	return 0;
}

[Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift