逆时针+顺时针(逆时针转三次),2.60s,最后一个点超时
逆时针+标准顺时针,2.01s,也是最后一个点超时,代码就是下面给的
吸o2大法让我686ms走过......
想知道怎么优化qwq
#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,r,z,t,a[505][505],b[505][505];
inline void shun(int x,int y,int r) {
for(register int j=x-r;j<=x+r;j++) {
for(register int k=y-r;k<=y+r;k++) {
b[j][k]=a[j][k];
}
}
int xx=x+r,yy=y-r;
for(register int j=x-r;j<=x+r;j++) {
for(register int k=y-r;k<=y+r;k++) {
a[j][k]=b[xx][yy];
xx--;
}
xx=x+r;
yy++;
}
}
inline void ni(int x,int y,int r) {
for(register int j=x-r;j<=x+r;j++) {
for(register int k=y-r;k<=y+r;k++) {
b[j][k]=a[j][k];
}
}
int xx=x-r,yy=y+r;
for(register int j=x-r;j<=x+r;j++) {
for(register int k=y-r;k<=y+r;k++) {
a[j][k]=b[xx][yy];
xx++;
}
xx=x-r;
yy--;
}
}
int main() {
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=n;j++) {
a[i][j]=++t;
}
}
for(register int i=1;i<=m;i++) {
memset(b,0,sizeof(b));
scanf("%d%d%d%d",&x,&y,&r,&z);
if(z==0) shun(x,y,r);
if(z==1) ni(x,y,r);
}
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=n;j++) {
printf("%d ",a[i][j]);
}
puts("");
}
return 0;
}