求助大佬,我老是TLE
查看原帖
求助大佬,我老是TLE
136596
尤斯蒂亚楼主2020/10/10 20:51
#include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int king[1001][1001];
int save[1001][1001];
int snake[1000];
int n,m,s;

void change()
{
	for (int i=1;i<=n;++i)
	 for (int j=1;j<=n;++j)
	  	king[i][j]=save[i][j];
}

void turning1(int x,int y,int r)
{
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x-r+i-1][y-r]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x-r][y+r-i+1]=snake[i];
	//左边到上边 
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x-r][y-r+i-1]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x-r+i-1][y+r]=snake[i];
	//上面到右边
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x-r+i-1][y+r]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x+r][y+r-i+1]=snake[i]; 
	//右面到下面
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x+r][y+r-i+1]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x+r-i+1][y-r]=snake[i]; 
	//下面到左面
	change();
}

void turning2(int x,int y,int r)
{
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x-r][y-r+i-1]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x+r-i+1][y-r]=snake[i];
	//上边到左边 
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x-r+i-1][y+r]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x-r][y-r+i-1]=snake[i];
	//上面到右边
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x+r][y-r+i-1]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x+r-i+1][y+r]=snake[i]; 
	//右面到下面
	for (int i=1;i<=(r*2+1);++i)
	snake[i]=king[x-r+i-1][y-r]; 
	for (int i=1;i<=(r*2+1);++i)
	save[x+r][y-r+i-1]=snake[i]; 
	//下面到左面
	
	change();
}

int main()
{	
	int x1,x2,lar,dir;
	s=0;
	cin>>n>>m;
	
	for (int i=1;i<=n;++i)
	 for (int j=1;j<=n;++j)
	  {
	  	s++;
	  	king[i][j]=s;
	  	save[i][j]=s;
	  }
// j is the line; 
	for (int k=1;k<=m;++k)
	{	
	cin>>x1>>x2>>lar>>dir;
	for (int ii=lar;ii>=1;--ii)
	{ 
	if (dir==1) turning2(x1,x2,ii);
	if (dir==0) turning1(x1,x2,ii);
	} 
	}

	for (int i=1;i<=n;++i)
	{
	 for (int j=1;j<=n;++j)
		cout<<king[i][j]<<' '; 
	if (i!=n) cout<<endl;
	} 
	  
	return 0;
}
2020/10/10 20:51
加载中...