90分,一个TLE,请大佬指点一二
查看原帖
90分,一个TLE,请大佬指点一二
527772
Login_楼主2021/9/1 23:06
#include<iostream>

using std::cin;
using std::cout;
using std::endl;

int n,m;
int x,y,r,z;
int a[505][505],b[505][505],c[505][505];
int ans=1;

void cpy_atob()
{
	int s=2*r+1;
	for(int i=1;i<=s;i++)
		for(int j=0;j<=s;j++)
			b[i][j]=a[x-r-1+i][y-r-1+j];
}

void cpy_btoc()
{
	int s=2*r+1;
	for(int i=1;i<=s;i++)
		for(int j=1;j<=s;j++)
			c[i][j]=b[i][j];
}

void right()
{
	int s=2*r+1;
	cpy_atob();
	cpy_btoc();
	for(int i=1;i<=s;i++)
		for(int j=1;j<=s;j++)
			b[j][s+1-i]=c[i][j];//容易写反 
	for(int i=1;i<=s;i++)
		for(int j=1;j<=s;j++)
			a[x-r-1+i][y-r-1+j]=b[i][j];
}

void left()
{
	int s=2*r+1;
	cpy_atob();
	cpy_btoc();
	for(int i=1;i<=s;i++)
		for(int j=1;j<=s;j++)
			b[i][j]=c[j][s+1-i];//容易写反 
	for(int i=1;i<=s;i++)
		for(int j=1;j<=s;j++)
			a[x-r-1+i][y-r-1+j]=b[i][j];
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=ans++;
			
	while(m--)
	{
		cin>>x>>y>>r>>z;
		if(z==0) right();
		else left();
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j];
			if(j!=n) cout<<' ';
		}
		cout<<endl;
	}
	return 0;
}
2021/9/1 23:06
加载中...