9个wa,一个tle,爆零代码求解
查看原帖
9个wa,一个tle,爆零代码求解
267888
AlexanderC楼主2023/8/8 19:21

思路是先做一个斜角轴对称,在做一个水平轴对称(z==1)或者竖直轴对称(z==0)。 试了一下样例还有几组自己写的样例都能过,请教一下各位为什么会爆零。

#include<bits/stdc++.h>
using namespace std;
const int N=600;
int a[N][N];
int n,m,x,y,r,z;
int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	cin>>n>>m;
	int p=1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;++j)
			a[i][j]=p++;
	while(m--){
		cin>>x>>y>>r>>z;
		if(z==0){
			int up=x-r,down=x+r;
			int le=y-r,ri=y+r;
			for(int i=up;i<=down;++i){
				for(int j=le;j<=le+i-up;++j){
					swap(a[i][j],a[j][i]);
				}
			}
			for(int i=up;i<=down;++i)
				for(int j=le;j<=(le+ri)/2;++j)
					swap(a[i][j],a[i][ri-j+le]);
		}
		if(z==1){
			int up=x-r,down=x+r;
			int le=y-r,ri=y+r;
			for(int i=up;i<=down;++i){
				for(int j=le;j<=le+i-up;++j){
					swap(a[i][j],a[j][i]);
				}
			}
			for(int j=le;j<=ri;++j){
				for(int i=up;i<=(up+down)/2;++i){
					swap(a[i][j],a[down-i+up][j]);
				} 
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;++j)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
} 
2023/8/8 19:21
加载中...