#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<vector>
#include<string.h>
#include<map>
#include<cmath>
#include<queue>
#define ll long long
#define INF 0x7fffffff
#define MAX 0x3f3f3f3f
#define maxn 100005
#define mem(a) memset(a,0,sizeof(a))
#define ull unsigned long long
using namespace std;
char a[15],b[15],c[15],d[15],f[30][30];
bool ff(char s1[], char s2[], int& p, int& q)
{
for(int i=0;s1[i]!='\0';i++)
{
for(int j=0;s2[j]!='\0';j++)
{
if(s1[i]==s2[j])
{
p=i;
q=j;
return true;
}
}
}
return false;
}
int main()
{
ios::sync_with_stdio(false);
int casee=0,u1,u2,u3,u4;
while(cin>>a)
{
if(a[0]=='#') break;
if(casee>0)
cout<<endl;
casee++;
int i,j;
cin>>b>>c>>d;
bool f1=ff(a,b,u1,u2);
bool f2=ff(c,d,u3,u4);
if(!f1||!f2)
cout<<"Unable to make two crosses"<<endl;
else
{
int t,len=strlen(a);
for(i=0;i<30;i++)
for(j=0;j<30;j++)
f[i][j]=' ';
if(u2<u4)//第二个竖直的词更长
{
t=u4;
for(i=0;b[i]!='\0';i++)
f[u4-u2+i][u1]=b[i];
for(i=0;d[i]!='\0';i++)
f[i][len+u3+3]=d[i];
}
else //第一个竖直的词更长
{
t=u2;
for(i=0;b[i]!='\0';i++)
f[i][u1]=b[i];
for(i=0;d[i]!='\0';i++)
f[u2-u4+i][len+u3+3]=d[i];
}
for(i=0;a[i]!='\0';i++)
f[t][i]=a[i];
for(i=0;c[i]!='\0';i++)
f[t][len+i+3]=c[i];
int flag;
for(i=0;i<30;i++)
{
flag=-1;
for(j=0;j<30;j++)
if(f[i][j]!=' ')
flag=j;
for(j=0;j<=flag;j++)
cout<<f[i][j];
if(flag!=-1)
cout<<endl;
}
}
}
return 0;
}
HDU1462 二维数组Word Crosses
最新推荐文章于 2021-05-21 18:36:06 发布