社区讨论

最后一个点TLE,还有啥可以优化的嘛

P4924[1007] 魔法少女小Scarlet参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lod838a9
此快照首次捕获于
2023/10/31 02:17
2 年前
此快照最后确认于
2023/11/05 12:44
2 年前
查看原帖
Orz
CPP
////IzayoiAster////
#include<cstdio>
#include<iostream>
#include<cstdlib>
#define maxn 508
using namespace std;
int n, m, a[maxn][maxn], b[maxn][maxn];

inline int rd(){
    register int ret = 0, f = 1; register char ch;
    while(!isdigit(ch = getchar())) if(ch == '-') f = 0;
    ret = ch^48;
    while(isdigit(ch = getchar())) ret = (ret<<1) + (ret<<3) + (ch^48);
    return f ? ret : -ret;
}

inline void prework(){
    int cnt = 1;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            a[i][j] = b[i][j] = cnt++;
    return;
}

void cp(int x, int y, int r){ //把a数组复制一下给b数组
    for(register int i=x-r; i<=x+r; i++)
        for(register int j=y-r; j<=y+r; j++)
            b[i][j] = a[i][j];
    return;
}

void rotate_l(int x, int y, int r){ //逆时针
    if(!r) return;
    for(register int i=x-r; i<=x+r; i++){
        for(register int j=y-r; j<=y+r; j++){
            int x1 = x - (y - j);
            int y1 = y - (i - x);
            a[i][j] = b[x1][y1];
        }
    }
    rotate_l(x, y, --r);
    return;
}

void rotate_r(int x, int y, int r){ //顺时针
    if(!r) return;
    for(register int i=x-r; i<=x+r; i++){
        for(register int j=y-r; j<=y+r; j++){
            int x1 = x + (y - j);
            int y1 = y + (i - x);
            a[i][j] = b[x1][y1];
        }
    }
    rotate_r(x, y, --r);
    return;
}

int main(){
    n = rd();
    m = rd();
    prework();
    while(m--){
        int x, y, r, z;
        x = rd();
        y = rd();
        r = rd();
        z = rd();
        if(z) rotate_l(x, y, r);
        else rotate_r(x, y, r);
        if(m) cp(x, y, r);
    }
    for(register int i=1; i<=n; i++){
        for(register int j=1; j<=n; j++){
            printf("%d ", a[i][j]);
        }
        putchar('\n');
    }
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...