1 条题解

  • 0
    @ 2026-9-30 12:45:10

    C++ :

    
    #include <cstdio>
    #include <cstring>
    int n;
    char g1[55][55], g2[55][55], t[55][55], tmp[55][55];
    void rot90(char s[55][55], char d[55][55]){
        for(int i=0;i<n;i++)for(int j=0;j<n;j++)d[j][n-1-i]=s[i][j];
    }
    void flip(char s[55][55], char d[55][55]){
        for(int i=0;i<n;i++)for(int j=0;j<n;j++)d[i][n-1-j]=s[i][j];
    }
    int defects(char a[55][55], char b[55][55]){
        int c=0;
        for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(a[i][j]=='X'||b[i][j]=='X')c++;
        return c;
    }
    int main(){
        if(scanf("%d",&n)!=1) return 0;
        for(int i=0;i<n;i++)scanf("%s",g1[i]);
        for(int i=0;i<n;i++)scanf("%s",g2[i]);
        int ans=1<<30;
        // 枚举第二层玻璃的 8 种摆放(4 个旋转 × 是否镜像,用中间缓冲避免原地覆盖)
        for(int f=0;f<2;f++){
            memcpy(t, g2, sizeof(t));
            if(f){ flip(t, tmp); memcpy(t, tmp, sizeof(t)); }
            for(int k=0;k<4;k++){
                int d=defects(g1, t);
                if(d<ans) ans=d;
                rot90(t, tmp); memcpy(t, tmp, sizeof(t));
            }
        }
        printf("%d\n", ans);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2703
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者