记录编号 321089 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010冲刺十]数字积木 最终得分 100
用户昵称 Gravatar__stdcall 是否通过 通过
代码语言 C++ 运行时间 0.075 s
提交时间 2016-10-13 12:58:22 内存使用 2.23 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>

using namespace std;

struct bigint
{
	int num[500];
	int size;
	bool operator<( const bigint &rhs ) const
	{
		bigint tmp1;
		bigint tmp2;
		tmp1.size = tmp2.size = size+rhs.size;
		
		for( int i = 0 ; i < size ; ++i )
		{
			tmp1.num[i] = num[i];
		}
		for( int i = 0 ; i < rhs.size ; ++i )
		{
			tmp1.num[i+size] = rhs.num[i];
		}
		
		for( int i = 0 ; i < rhs.size ; ++i )
		{
			tmp2.num[i] = rhs.num[i];
		}
		for( int i = 0 ; i < size ; ++i )
		{
			tmp2.num[i+rhs.size] = num[i];
		}
		
		for( int i = 0 ; i < tmp1.size ; ++i )
		{
			if( tmp1.num[i] > tmp2.num[i] )
			{
				return true;
			}
			else if( tmp1.num[i] < tmp2.num[i] )
			{
				return false;
			}
		}
		return false; // equal
	}
};

bigint num[1001];
int n;
string str;

int main()
{
	freopen( "brick.in" , "r" , stdin );
	freopen( "brick.out" , "w" , stdout );
	cin >> n;
	for( int i = 0 ; i < n ; ++i )
	{
		cin >> str;
		num[i].size = str.size();
		for( int j = 0 ; j < str.size() ; ++j )
		{
			num[i].num[j] = str[j]-'0';
		}
	}
	sort( num , num+n );
	for( int i = 0 ; i < n ; ++i )
	{
		for( int j = 0 ; j < num[i].size ; ++j )
		{
			cout << num[i].num[j];
		}
	}
	cout << endl;
	return 0;
}