有些奇怪的思路,10分
查看原帖
有些奇怪的思路,10分
1432277
limoxuan0712楼主2025/7/2 10:43
#include<bits/stdc++.h>
using namespace std; 
int a[505][505],n,m,b[505][505],k=1,c[505][505];
void print(int a[505][505],int n){
	for(int i=1;i<=n;i++,printf("\n"))
		for(int j=1;j<=n;j++)
			printf("%d ",a[i][j]);
}
void shun(int x,int y,int r){
	for(int i=x-r,ii=1;i<=x+r;i++,ii++)
		for (int j=x-r,jj=1;j<=x+r;j++,jj++)
			b[ii][jj] = a[i][j];//首先将要修改的部分赋给b,且b里是以1下标计算的
			 
	int n=2*r+1;
	for(int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			c[j][n-i+1] = b[i][j];//c成为b的转置 
	for(int i=x-r,ii=1;i<=x+r;i++,ii++)
		for (int j=y-r,jj=1;j<=y+r;j++,jj++)
			a[i][j]=c[ii][jj];//把c赋回去 
}
void ni(int x,int y,int r){
	for(int i=x-r,ii=1;i<=x+r;i++,ii++)
		for (int j=x-r,jj=1;j<=x+r;j++,jj++)
			b[ii][jj] = a[i][j];
	int n=2*r+1;
	for(int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			c[n+1-j][i]=b[i][j]; 
	for(int i=x-r,ii=1;i<=x+r;i++,ii++)
		for (int j=y-r,jj=1;j<=y+r;j++,jj++)
			a[i][j]=c[ii][jj];
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++,k++)
			a[i][j]=k;
	while(m--){
		int x,y,r,z;
		cin>>x>>y>>r>>z;
		if(z==0)
			shun(x,y,r);
		else 
			ni(x,y,r);
	}
	print(a,n);
 	return 0;
}

请诸位大神们在源代码上修改

回复必关

2025/7/2 10:43
加载中...