记录编号 240377 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010冲刺十]数字积木 最终得分 100
用户昵称 GravatarO(1) 是否通过 通过
代码语言 C++ 运行时间 0.447 s
提交时间 2016-03-22 18:57:07 内存使用 4.14 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int g[1001][1001],deg[1001];
int compa(string x,string y)
{
	string s=x+y;
	string d=y+x;
	int len=x.length()+y.length(),i=0;
	for(;i<len;i++)
	{
		if(s[i]>d[i])
		   return 1;
		else if(s[i]<d[i])
		   return 2;
		   
	}
	return 1;
	
}
int main()
{
	ofstream fout("brick.out");
	ifstream fin("brick.in");
	int n;
	fin>>n;
	string a[n];
	for(int i=0;i<n;i++)
	     fin>>a[i];
	for(int i=0;i<n;i++)
	   for(int j=i+1;j<n;j++)
	   {
	   	int u=compa(a[i],a[j]);
	   	//cout<<u<<" ";
	   	if(u==1)
	   	{
	   		g[i][j]=1;
	   		deg[j]++;
	   	}
	   	else if(u==2)
	   	{
	   		g[j][i]=1;
	   		deg[i]++;
	   	}
	   }
	   
	//for(int i=0;i<n;i++)
	//   cout<<deg[i]<<" ";
	int k=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(deg[j]==0)
			 {
			    fout<<a[j];
		    
			deg[j]--;
			k=j;
			break;
		}
		}
		for(int j=0;j<n;j++)
		   if(g[k][j]==1)
		   {
		   	g[k][j]=0;
		   	deg[j]--;
		   }
	}
	
}