1 条题解

  • 0
    @ 2022-10-13 10:10:24

    每个点最多对应四个位置要求相同。可以指考虑左上部分。看看左上部分转四次有多少个不同的,来看看至少怎么修改。

    #include <bits/stdc++.h>
    using namespace std;
    int t, n;
    char a[105][105];
    int main()
    {
        cin >> t;
        while (t--)
        {
            cin >> n;
            for (int i = 1; i <= n; i++)
                for (int j = 1; j <= n; j++)
                    cin >> a[i][j];
            int ans = 0;
            if (n % 2 == 0)
            {
                int mid = n / 2;
                for (int i = 1; i <= n / 2; i++)
                    for (int j = 1; j <= n / 2; j++)
                    {
                        //看看左上片旋转时有多少个相同的
                        //旋转后的位置可以纸上画画推一下
                        int now = 1;
                        if (a[j][n - i + 1] == a[i][j])
                            now++;
                        if (a[n - i + 1][n - j + 1] == a[i][j])
                            now++;
                        if (a[n - j + 1][i] == a[i][j])
                            now++;
                        ans += min(now, 4 - now);
                    }
            }
            else
            {
                int mid = n / 2;
                for (int i = 1; i <= n / 2 + 1; i++)
                    for (int j = 1; j <= n / 2; j++)
                    {
                        //看看左上片旋转时有多少个相同的
                        //旋转后的位置可以纸上画画推一下
                        int now = 1;
                        if (a[j][n - i + 1] == a[i][j])
                            now++;
                        if (a[n - i + 1][n - j + 1] == a[i][j])
                            now++;
                        if (a[n - j + 1][i] == a[i][j])
                            now++;
                        ans += min(now, 4 - now);
                    }
            }
            cout << ans << "\n";
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    1100
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    6
    已通过
    5
    上传者