HDU 4119--wa--求助!!!
#include<cstdlib>#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include <algorithm>#define M 18290#define N 55#define inf 0x7f7f7f7fusing 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;}