P1205 [USACO1.2]方块转换 Transformations
AC代码
#include<bits/stdc++.h>
using namespace std;
char c[20][20];
char s[20][20];
char f[20][20];
int T;
bool judge1()
{
int k=1,l=T;
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
{
if(c[i][j]!=s[k][l]) return 0;
++k;
if(k==T+1) { k=1;--l;}
}
return 1;
}
bool judge2()
{
int k=T,l=T;
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
{
if(c[i][j]!=s[k][l]) return 0;
--l;
if(l==0) {
k--;l=T;
}
}
return 1;
}
bool judge3()
{
int k=T,l=1;
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
{
if(c[i][j]!=s[k][l]) return 0;
k--;
if(k==0) {
k=T;l++;
}
}
return 1;
}
bool judge4()
{
for(int i=1;i<=T;++i)
{
string s1(c[i]+1,c[i]+T+1);
string s2(s[i]+1,s[i]+T+1);
reverse(s1.begin(),s1.end());
if(s1!=s2) return 0;
}
return 1;
}
bool judge5()
{
int k=1,l=T;
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
{
f[k][l]=c[i][j];
l--;
if(l==0) {
l=T;k++;
}
}
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
c[i][j]=f[i][j];
if(judge1()) return 1;
if(judge2()) return 1;
if(judge3()) return 1;
return 0;
}
int main()
{
cin>>T;
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
{
cin>>c[i][j];
}
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
{
cin>>s[i][j];
}
bool r1=1;
for(int i=1;i<=T;++i)
for(int j=1;j<=T;++j)
if(c[i][j]!=s[i][j]) {r1=0;break;}
if(judge1()) {cout<<1<<endl;return 0;}
if(judge2()) {cout<<2<<endl;return 0;}
if(judge3()) {cout<<3<<endl;return 0;}
if(judge4()) {cout<<4<<endl;return 0;}
if(judge5()) {cout<<5<<endl;return 0;}
if(r1==1) {cout<<6<<endl;return 0;}
cout<<7<<endl;
return 0;
}

浙公网安备 33010602011771号