UVA1013201串配对

来源:互联网 发布:wpf 管理系统源码购 编辑:程序博客网 时间:2024/05/16 14:30

这题没什么说的,排序之后,暴力就行了。

#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<string>#include<set>#include<map>#include<iostream>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn=500;const double eps=1e-5;string s[maxn];int n;int t;int L;bool cmp(string a,string b){    return a.length()<b.length();}bool is_true(string tem){    bool visit[maxn];    memset(visit,0,sizeof(visit));    for(int i=0;i<t;i++)    {        for(int j=t-1;j>i;j--)        {            if(!visit[j]&&s[i].length()+s[j].length()==L)            {                if(s[i]+s[j]==tem||s[j]+s[i]==tem)                {                    visit[i]=visit[j]=1;                    break;                }            }        }    }    for(int i=0;i<t;i++)          if(!visit[i])          return 0;    return 1;}string solve(){    L=s[0].length()+s[t-1].length();    for(int i=0;s[i].length()==s[0].length();i++)        for(int j=t-1;s[j].length()==s[t-1].length();j--)    {        string tem=s[i]+s[j];        if(is_true(tem))        {            return tem;        }        tem=s[j]+s[i];        if(is_true(tem))        {            return tem;        }    }}int main(){    while(cin>>n)    {        getchar();        getchar();        while(n--)        {            t=0;            while(getline(cin,s[t])&&!s[t].empty())                t++;            sort(s,s+t,cmp);            string ans=solve();            cout<<ans<<endl;            if(n)                cout<<endl;        }    }    return 0;}


0 0