RT 代码如下
#include<bits/stdc++.h>
#define endl "\n"
#define cint const int
#define ln length()
#define res register
#define short int
using namespace std;
cint N=505;
unsigned short maho[N][N];//当前魔法阵
unsigned short predict[N];//储存用于更换的数字
int n,m,x,y,z,r;
void clear(){
fill(predict,predict+(2*r+1)*(2*r+1),0);
}
void spinz_1(){//逆时针旋转
unsigned short p=1;//标记predict序号
for(int i=x-r;i<=x+r;i++){
for(int j=y-r;j<=y+r;j++){
predict[p]=maho[i][j];
// cout<<predict[p]<<" ";
p++;
}
// cout<<endl;
}
// cout<<endl;
p=1;
for(int i=x-r;i<=x+r;i++){
for(int j=y+r;j>=y-r;j--){
maho[j][i]=predict[p];
p++;
}
}
// cout<<endl;
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++)
// cout<<maho[i][j]<<" ";
// cout<<endl;
// }
}
void spinz_0(){//顺时针
for(int i=1;i<=3;i++)
spinz_1();//转换三次
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
short k=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
maho[i][j]=k;
k++;
}
for(int i=1;i<=m;i++){
clear();
cin>>x>>y>>r>>z;
if(z==1)
spinz_1();
else spinz_0();
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<maho[i][j]<<" ";
cout<<endl;
}
return 0;
}