3,881
社区成员
发帖
与我相关
我的任务
分享#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include <algorithm>
#define M 18290
#define N 55
#define inf 0x7f7f7f7f
using namespace std;
int n,m;
char ma[N][N];
struct point
{
int x,y;
};
point p[N];
string str[101];
int cmp(const void *a,const void *b)
{
if((*(point *)a).x!=(*(point *)b).x)
return (*(point *)a).x-(*(point *)b).x;
return (*(point *)a).y-(*(point *)b).y;
}
int main()
{
//#ifndef ONLINE_JUDGE
// freopen("ex.in","r",stdin);
//#endif
int t;
scanf("%d",&t);
int ncase=0;
while(t--)
{
scanf("%d%*c",&n);
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
scanf("%c",&ma[i][j]);
scanf("%*c");
}
char c;
int k=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
scanf("%c",&c);
if(c=='*')
{
p[k].x=i,p[k].y=j;
k++;
}
}
scanf("%*c");
}
scanf("%d",&m);
for(int i=0; i<m; i++)
cin>>str[i];
string sss[4];
int temp;
for(int i=0; i<k; i++) //1
{
sss[0]+=ma[p[i].x][p[i].y];
temp=n-1-p[i].x;
p[i].x=p[i].y;
p[i].y=temp;
}
qsort(p,k,sizeof(p[0]),cmp);
for(int i=0; i<k; i++) //2
{
sss[1]+=ma[p[i].x][p[i].y];
temp=n-1-p[i].x;
p[i].x=p[i].y;
p[i].y=temp;
}
qsort(p,k,sizeof(p[0]),cmp);
for(int i=0; i<k; i++) //3
{
sss[2]+=ma[p[i].x][p[i].y];
temp=n-1-p[i].x;
p[i].x=p[i].y;
p[i].y=temp;
}
qsort(p,k,sizeof(p[0]),cmp);
for(int i=0; i<k; i++) //3
{
sss[3]+=ma[p[i].x][p[i].y];
}
string tans="";
int g=0;
for(int i=0; i<4; i++)
{
string ans="",ss,s="";
for(int j=0; j<4; j++)
s+=sss[(i+j)%4];
int len=s.size(),ok=1;
int one=0;
for(int i=0; i<len; i++)
{
if((s[i]=='.')&&one)
{
one=0;
int flag=1;
for(int i=0; i<m; i++)
if(ss==str[i])
{
flag=0;
ans+=" ";
ans+=ss;
}
if(flag)
{
ok=0;
break;
}
ss="";
}
if(s[i]!='.')
{
ss+=s[i];
one=1;
}
}
if(one&&ok)
{
int flag=1;
for(int i=0; i<m; i++)
if(ss==str[i])
{
flag=0;
ans+=" ";
ans+=ss;
}
if(flag)
{
ok=0;
}
}
// cout<<"ans="<<ans<<endl;
if(ok)
{
if(!g)
{
tans=ans;
g=1;
}
else
{
if(ans<tans)
tans=ans;
}
}
}
printf("Case #%d:",++ncase);
if(g)
cout<<tans<<endl;
else
printf(" FAIL TO DECRYPT\n");
}
return 0;
}