样例过了只有有个AC
查看原帖
样例过了只有有个AC
856518
niepandou楼主2023/3/16 20:06
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 510;

int n,m;
int board[N][N];
int backup[N][N];

void shun(int x,int y,int r)
{
	int row = max(x-r,1), col = min(y + r,n);
	for (int j = x-r;j <= x + r;++j)
	{
		if(j >= 1 &&j <= n)
		for (int i = y - r;i <= y + r;++i)
		{
			if (i >= 1 && i <= n)
				backup[row][col--] = board[i][j];
			if (!col) break;
		}
		row++;
		col = min(y + r, n);
	}
}
void ni(int x, int y, int r)
{
	int row = min(x + r,n), col = max(1,y-r);
	for (int i = x - r;i <= x + r;++i)
	{
		if(i >= 1 && i <= n)
		for (int j = y - r;j <= y + r;++j)
		{
			if(j >= 1 && j <= n)
			backup[row--][col] = board[i][j];
		}
		col++;
		row = min(x+r,n);
	}

}
int main()
{
	cin >> n >> m;

	for (int i = 1;i <= n;++i)
	{
		for (int j = 1; j <= n;++j)
			board[i][j] = (i-1) * n + j;
	}


	//for (int i = 1;i <= n;++i)
	//{
	//	for (int j = 1;j <= n;++j)
	//		printf("%5d", board[i][j]);
	//	cout << endl;
	//}
	memcpy(backup, board, sizeof board);

	while (m--)
	{
		int x, y, r,z;
		cin >> x >> y >> r >> z;
		if (!z) shun(x,y,r);
		else ni(x,y,r);
		memcpy(board, backup, sizeof backup);
		//for (int i = 1;i <= n;++i)
		//{
		//	for (int j = 1;j <= n;++j)
		//		printf("%5d", board[i][j]);
		//	cout << endl;
		//}
	}

	for (int i = 1;i <= n;++i)
	{
		for (int j = 1;j <= n;++j)
			printf("%d ", board[i][j]);
		cout << endl;
	}
	return 0;
	
}
2023/3/16 20:06
加载中...