hdu4119-Isabella's Message
这个题是我水出来的,水了一天才水出来的,代码有点乱。
思路:
1,读矩阵,
2,从不同方向四种翻转,每种翻转翻三个90°
3,读入m个单词
4,找出不合要求的情况做好标记
5,输出字典序最小的 明文
代码如下:(由于变量很多,命名命的我头都大了,所以有点乱)
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
const int N = 55;
char a[N][N], b[N][N];
string word[4][105];
string s[4], s2[105];
void trans (int n)
{
char c[N][N];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
c[i][j] = b[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
b[j][i] = c[n-1-i][j];
}
void mu (int k)
{
string temp = s[k];
s[k] = "";
for(int i = 0, flag = 0; i < (int)temp.size(); i++)
{
if(temp[i] <= 'z'&& temp[i] >= 'a')
{
s[k]+=temp[i];
flag = 1;
}
else if(flag)
{
s[k]+=' ';
flag = 0;
}
}
int count = 0;
for( int j = s[k].size()-1; j >=0 ; j--)
if(s[k][j] == ' ')count++;
else break;
if(count)
{
string wo;
for(int h = 0; h < (int)s[k].size()-count; h++ )
wo+=s[k][h];
s[k] = wo;
}
}
int com (const void *a, const void *b)
{
string *c = (string *)a;
string *d = (string *)b;
return strcmp(c->data(),d->data());
}
int main ()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int t, m, n;
cin>>t;
int T = 0;
while(t--)
{
T++;
cout<<"Case #"<<T<<":";
s[0] = s[1] = s[2] = s[3] = "";
cin>>n;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin>>a[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin>>b[i][j];
for(int k = 0; k < 4; k++)
{
for(int num = 0; num < 4; num++)
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(b[i][j] == '*')s[k]+=a[i][j];
if(num<3)trans(n);
}
}
for(int i = 0; i < 4; i++)
mu(i);
cin>>m;
for(int i = 0; i < m; i++)
cin>>s2[i];
for(int i = 0; i < 4; i++)
{
string temp;
for(int k = 0; k < (int)s[i].size(); k++)
{
if(s[i][k]!=' ') temp+=s[i][k];
if(s[i][k] == ' '||k == (int)s[i].size()-1)
{
//cout<<temp<<endl;
int v;
for(v = 0; v < m; v++)
if(temp == s2[v])
{
v = -100;
break;
}
if(v>0)
{
s[i][0] = 127;
break;
}
temp = "";
}
}
}
qsort(s,4,sizeof(string),com);
if(s[0][0] == 127)
cout<<" FAIL TO DECRYPT"<<endl;
else
cout<<" "<<s[0]<<endl;
}
return 0;
}
浙公网安备 33010602011771号