求助!前面的点都对,最后一个TLE了
查看原帖
求助!前面的点都对,最后一个TLE了
354967
heartsofiron4楼主2023/9/24 15:28
#include<bits/stdc++.h>
using namespace std; 

int a[505][505], b[505][505], c[505][505], n, m, x, y, r, z, s; 

void zhuan(int x, int y, int z, int p){
	int w = 0, v = 0, k = 2 * z + 1; 
	for(int i = x - z; i <= x + z; i++){
		w = (w % (k)) + 1; 
		for(int j = y - z; j <= y + z; j++){
			v = (v % (k)) + 1; 
			b[w][v] = a[i][j]; 
			c[w][v] = a[i][j]; 
		}
	}
	
	for(int i = 1; i <= k; i++){
		for(int j = 1; j <= k; j++){
			if(p == 0){
				b[i][j] = c[k + 1 - j][i]; 
			}else{
				b[i][j] = c[j][k + 1 - i]; 
			}
		}
	}
	
	for(int i = x - z; i <= x + z; i++){
		w = (w % (k)) + 1; 
		for(int j = y - z; j <= y + z; j++){
			v = (v % (k)) + 1; 
			a[i][j] = b[w][v]; 
		}
	}
}

int main(){
	cin >> n >> m; 
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			s++; 
			a[i][j] = s; 
		}
	}
	
	for(int i = 1; i <= m; i++){
		cin >> x >> y >> r >> z; 
		zhuan(x, y, r, z); 
	}
	
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cout << a[i][j] << " "; 
		}
		cout << endl; 
	}
	return 0;  
}
2023/9/24 15:28
加载中...