#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<set>
#include<cstring>
#include <algorithm>
#define inf 0x7fffffff
#define N 300
#define MIN 1e-11
#define M 10000
#define LL long long
using namespace std;
int n,k,h,t,nn;
int len;
int v[N];
struct S
{
string str;
int len;
};
S s[N];
int cmp(const void *a,const void *b)//
{
return (*(S*)b).len-(*(S*)a).len;
}
int dfs(string ss,int k)
{
if(k==n/2)
{
cout<<ss<<endl;
return 1;
}
string s1;
int l;
for(int i=n-1;i>=nn;i--)
if(!v[i])
{
l=s[k].len+s[i].len;
if(l<len)
return 0;
s1=s[k].str;
s1+=s[i].str;
v[i]=1;
if(ss==s1&&dfs(s1,k+1))
return 1;
s1=s[i].str;
s1+=s[k].str;
if(ss==s1&&dfs(s1,k+1))
return 1;
v[i]=0;
}
return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ex.in","r",stdin);
#endif
scanf("%d%*c%*c",&t);
while(t--)
{
memset(v,0,sizeof(v));
n=0;
char c[300];
while(cin.getline(c,300))
{
len=strlen(c);
if(!len)break;
s[n].str=c;
s[n++].len=len;
}
qsort(s,n,sizeof(s[0]),cmp);
// for(int i=0;i<n;i++)
// cout<<s[i].str<<" "<<s[i].len<<endl;
nn=n/2,len=s[0].len+s[n-1].len;
string s1;
v[0]=1;
for(int i=n-1;i>=nn;i--)
{
v[i]=1;
s1=s[0].str;
s1+=s[i].str;
if(dfs(s1,1))
break;
s1=s[i].str;
s1+=s[0].str;
if(dfs(s1,1))
break;
v[i]=0;
}
if(t)
printf("\n");
}
return 0;
}
10132 - File Fragmentation------水题
最新推荐文章于 2023-02-22 12:27:09 发布