洛谷:P4924 [1007]魔法少女小Scarlet



#include<iostream> using namespace std; int n,m; int map[505][505]; void show(){//显示 for(int i=0;i<n*n;i++){ cout<<map[i/n][i%n]; if(i%n<n-1)cout<<" "; if(i%n==n-1)cout<<endl; } } int main(){ int i,x,y,r,z; cin>>n>>m; int s=n*n; for(i=0;i<=s;i++){//赋值 map[i/n][i%n]=i+1; } for(int j=0;j<m;j++){ cin>>y>>x>>r>>z;x--;y--; int s=(r+1)*r,temp;//顺/逆时针旋转,一个数总共牵扯到4个数,所以就对左上的1/4区域的数处理即可 for(i=0;i<s;i++){ int xx=x-r+i%(r+1),yy=y-r+i/(r+1);//计算出左上角的位置 temp=map[yy][xx];//记录当前数字 if(z==0){//方向 int tt=3;while(tt--){ map[yy][xx]=map[y+(x-xx)][x-(y-yy)]; int ttemp=yy;//将3个其余数字进行旋转并赋值 yy=y+(x-xx);xx=x-(y-ttemp); }map[yy][xx]=temp;//将记录的数组保存到旋转后的位置 }else{ int tt=3;while(tt--){ map[yy][xx]=map[y-(x-xx)][x+(y-yy)]; int ttemp=yy;//同上 yy=y-(x-xx);xx=x+(y-ttemp); }map[yy][xx]=temp; } } } show(); return 0; }

题目地址:https://www.luogu.com.cn/problem/P4924

猜你喜欢

转载自www.cnblogs.com/forwhat00/p/13210199.html