最后一个点为何开O2才能过
查看原帖
最后一个点为何开O2才能过
570190
Trisoil楼主2021/9/12 17:37

代码如下

#include <cstdio>
#include <algorithm>
using namespace std;
int n,m;
int mp[505][505];
void printmp(){
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++){
            printf("%d ",mp[i][j]);
        }
        printf("\n");
    }
}
int main(){
    //freopen("a.in","r",stdin);
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++) mp[i][j] = (i-1)*n+j;
    int x,y,r,z;
    for (int i=1;i<=m;i++){
        scanf("%d%d%d%d",&x,&y,&r,&z);
        if (z){
            // 逆时针
            for (int j=1;j<=r;j++){
                int px = x - j, py = y - j;
                for (int k=1;k<=2*j;k++){
                    int temp = mp[px][py];
                    swap(temp,mp[x+j][y-j+k-1]);
                    swap(temp,mp[x+j-k+1][y+j]);
                    swap(temp,mp[x-j][y+j-k+1]);
                    swap(temp,mp[x-j+k-1][y-j]);
                    px++;
                }
            }
        }else{
            // 顺时针
            for (int j=1;j<=r;j++){
                int px = x - j,py = y - j;
                for (int k=1;k<=j*2;k++){
                    int temp = mp[px][py];
                    swap(temp,mp[x-j+k-1][y+j]);
                    swap(temp,mp[x+j][y+j-k+1]);
                    swap(temp,mp[x+j-k+1][y-j]);
                    swap(temp,mp[x-j][y-j+k-1]);
                    py++;
                }
            }
        }
    }
    printmp();
}
2021/9/12 17:37
加载中...