记录编号 |
240377 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2010冲刺十]数字积木 |
最终得分 |
100 |
用户昵称 |
O(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]--;
}
}
}