1 条题解

  • 0
    @ 2026-5-4 22:57:32
    #include <bits/stdc++.h>
    
    int main() {
    
        int n, m;
        scanf("%d%d", &n, &m);
        char str[20];
        int a[20][20];
        std::map<int, int> Map;
        
        while (m--) {
            for (int i = 0; i < n; ++i) {
                scanf("%s", str);
                for (int j = 0; j < n; ++j) {
                    a[i][j] = (str[j] == 'R');
                }
            }
            for (int i = 0; i < n - 1; ++i) {
                for (int j = 0; j < n - 1; ++j) {
                    if (a[i][j]) {
                        a[i][j] ^= 1;
                        a[i + 1][j] ^= 1;
                        a[i][j + 1] ^= 1;
                        a[i + 1][j + 1] ^= 1;
                    }
                }
            }
            int state = 0;
            for (int i = 0; i < n - 1; ++i) state = state << 1 | a[i][n - 1];
            for (int i = 0; i < n; ++i) state = state << 1 | a[n - 1][i];
            Map[state] += 1;
        }
        
        int ans = 0;
        for (auto &[k, v]: Map) {
            ans += v * (v - 1) / 2;
        }
        
        printf("%d\n", ans);
    }
    
    • 1

    信息

    ID
    10656
    时间
    1000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者