1首先转四个方向以后回到原来的位置,所以是以4为循环的。
2 后来递交了一下tle
就是下面的代码
#include<iostream>
#include<stdio.h>
using namespace std;
#define MAX 12
char map[MAX][MAX];
char graph[MAX][MAX][MAX];
void init()
{
int k=0;int i;int j;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
map[i][j]='0';
for(k=0;k<4;k++)
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
graph[k][i][j]='0';
}
int main()
{
int n;int m;
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
int i,j,k;
for(i=1;i<=n;i++)
{
scanf("%s",map[i]);
for(j=n;j>0;j--)
{
map[i][j]=map[i][j-1];
}
map[i][0]='0';
}
/*
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
cout<<map[i][j];
}
cout<<endl;
}
*/
//初始化第一个graph
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
graph[0][i][j]=map[i][j];
}
}
for(k=0;k<=n;k++)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
graph[k+1][i][j]=graph[k][j][n-i+1];
}
}
}
/*
for(k=0;k<=4;k++)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
cout<<graph[k][i][j];
}
cout<<endl;
}
cout<<k<<endl;
}
*/
//处理
m=0-m;
while(m<0)
{
m+=4;
}
m=m%(n+1);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cout<<graph[m][i][j];
}
cout<<endl;
}
}
return 0;
}
然后我仔细分析了一下,别的时间复杂度都是n*n,我假设估计是
while(m<0)
{
m+=4;
}
m=m%(n+1);
有点问题,这个时候我会到题中看,发现旋转的次数是一个32位的数,让后,我把测试数据中的这个数改为-9999999999。
发现出结果的时候,突然卡了一下。我确信是这里出错了。
因为如果不限制的话,这里会循环大约2的31次方次。
让后,我修改了一下
m=0-m;
while(m<0)
{
m+=4000000000;
}
m=m%4;
这样最多加10次,如果说加过了,求余数,一次就够。
整体代码如下
#include<iostream>
#include<stdio.h>
using namespace std;
#define MAX 12
char map[MAX][MAX];
char graph[MAX][MAX][MAX];
//时间复杂度12*12*12,不是问题
void init()
{
int k=0;int i;int j;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
map[i][j]='0';
for(k=0;k<4;k++)
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
graph[k][i][j]='0';
}
int main()
{
int n;int m;
//freopen("in2.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
//输入部分(没有问题)
int i,j,k;
for(i=1;i<=n;i++)
{
scanf("%s",map[i]);
for(j=n;j>0;j--)
{
map[i][j]=map[i][j-1];
}
map[i][0]='0';
}
/*
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
cout<<map[i][j];
}
cout<<endl;
}
*/
//初始化第一个graph
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
graph[0][i][j]=map[i][j];
}
}
for(k=0;k<4;k++)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
graph[k+1][i][j]=graph[k][j][n-i+1];
}
}
}
/*
for(k=0;k<=n;k++)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
cout<<graph[k][i][j];
}
cout<<endl;
}
cout<<k<<endl;
}
*/
//处理
m=0-m;
while(m<0)
{
m+=4000000000;
}
m=m%4;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cout<<graph[m][i][j];
}
cout<<endl;
}
}
return 0;
}
(精)hdoj 2135
最新推荐文章于 2024-07-19 15:30:59 发布