usaco Transformations

模拟就行。注意int arr[][]二维数组在定义时是二维数组,而函数传参时是指针。这意味着memset()的不同。传参时只能当作一维逐个memset。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
const int SZ=,INF=0x7FFFFFFF;
typedef long long lon;
char src[SZ][SZ],dst[SZ][SZ]; void init(char x[SZ][SZ],int n)
{
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)cin>>x[i][j];
}
} bool same1(char x[SZ][SZ],char y[SZ][SZ],int n)
{
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
{
if(y[j][n-i+]!=x[i][j])return ;
}
}
return ;
} bool same2(char x[SZ][SZ],char y[SZ][SZ],int n)
{
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
{
if(y[n-i+][n-j+]!=x[i][j])return ;
}
}
return ;
} bool same3(char x[SZ][SZ],char y[SZ][SZ],int n)
{
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
{
if(y[n-j+][i]!=x[i][j])return ;
}
}
return ;
} void getsvd(char dst[SZ][SZ],char src[SZ][SZ],int n)
{
//是指针
for(int i=;i<=n;++i)
memset(dst[i],,sizeof(dst[i]));
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)dst[i][j]=src[i][j];
}
for(int i=;i<=n;++i)
{
for(int j=;j<=n/;++j)
{
swap(dst[i][j],dst[i][n-j+]);
}
}
} bool same4(char x[SZ][SZ],char y[SZ][SZ],int n)
{
char svd[SZ][SZ];
//cout<<sizeof(svd)<<endl;
//memset(svd,0,sizeof(svd));
getsvd(svd,x,n);
//return equal(svd+2,svd+3,y+2);
//return equal(svd[1]+1,svd[1]+1+n*12,y[1]+1);
return equal(svd[]+,svd[]+n*,y[]+);
} bool same5(char x[SZ][SZ],char y[SZ][SZ],int n)
{
char svd[SZ][SZ];
getsvd(svd,x,n);
if(same1(svd,y,n))return ;
else if(same2(svd,y,n))return ;
else if(same3(svd,y,n))return ;
else return ;
} bool same6(char x[SZ][SZ],char y[SZ][SZ],int n)
{
return equal(x[]+,x[]+n*,y[]+);
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
lon casenum;
//cin>>casenum;
//for(lon time=1;time<=casenum;++time)
{
int n;
cin>>n;
init(src,n),init(dst,n);
if(same1(src,dst,n))cout<<<<endl;
else if(same2(src,dst,n))cout<<<<endl;
else if(same3(src,dst,n))cout<<<<endl;
else if(same4(src,dst,n))cout<<<<endl;
else if(same5(src,dst,n))cout<<<<endl;
else if(same6(src,dst,n))cout<<<<endl;
else cout<<<<endl;
}
return ;
}
上一篇:Ultimate Weirdness of an Array CodeForces - 671C (gcd,线段树)


下一篇:C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法