torus711 のアレ

主に競技プログラミングの問題について書きます

TopCoder SRM 571, Division 2, Level 2 : FoxAndMp3Easy

概要

楽曲のファイルに 1.mp3, 2.mp3, ..., 10.mp3, ... というように名前を付けている。
これらを、ファイル名の辞書順比較で小さい順にプレイリストを作る MP3 プレイヤーに入れる。
作成されるプレイリストを求めよ。
(曲数が 50 を超える場合は最初の 50 曲のみについて示せ)

解法

ファイル名となる文字列を全て生成してソート。

コード

typedef vector<string> VS;
typedef ostringstream OSS;

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )
#define ALL( c ) (c).begin(), (c).end()
#define PB( n ) push_back( n )

class FoxAndMp3Easy
{
public:
	vector <string> playList( int n )
	{
		VS res;
		REP( i, 0, n )
		{
			res.PB( genStr( i + 1 ) );
		}
		sort( ALL( res ) );
		if ( 50 < res.size() )
		{
			res.resize( 50 );
		}
		return res;
	}

	string genStr( int n )
	{
		OSS oss;
		oss << n;
		string res = oss.str();
		return res + ".mp3";
	}
};