Uva 10132 File Fragmentation

来源:互联网 发布:python range函数 编辑:程序博客网 时间:2024/06/05 21:55
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1073
题意:
给出一个只包含0,1的字符串分割成两段后的结果,不同方法分割后的片段混在一起,要求出原来的字符串。
题解:暴力。
源字符串必定有最长的字符串和最短的字符串合并而成,最长和最短的组合只可能有8种情况,然后判断每个字符串是否符合要求。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>using namespace std;const int MAX=200;string a[MAX];int n;bool cmp(string a,string b){return a.size()<b.size();}bool check(string ss){bool use[MAX];memset(use,0,sizeof(use));for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(!use[i]&&!use[j]&&a[i]+a[j]==ss){use[i]=use[j]=true;}}}for(int i=0;i<n;i++){if(use[i]==false)return false;}return true;}int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int T;cin>>T;getchar();getchar();while(T--){n=0;while(getline(cin,a[n])){if(a[n]=="")break;n++;}sort(a,a+n,cmp);if((n>2&&a[0].size()!=a[1].size())||n==2){if(check(a[0]+a[n-1]))cout<<a[0]+a[n-1]<<endl;else if(check(a[n-1]+a[0]))cout<<a[n-1]+a[0]<<endl;}else{int flag=0;for(int i=0;i<2;i++){for(int j=n-1;j>n-3;j--){if(!flag&&check(a[i]+a[j])){cout<<a[i]+a[j]<<endl;flag=1;break;}else if(!flag&&check(a[j]+a[i])){cout<<a[j]+a[i]<<endl;flag=1;break;}}if(flag) break;}}if(T) printf("\n");}return 0;}