CF2094C Brr Brrr Patapim

· · 题解

题目传送门

思路

本题就是给你一个二维数组,一维数组 p_{i+j} 上的数就对应二维数组中 G_{i,j} 表示的数。

不难看出,一维数组 p 中唯一没有被赋值的数就是 p_1,我们只需要找出 1 \sim 2 \times n 中没有出现过的数,然后将其赋值给 p_1 即可。而其余位置上的数在输入时赋值就行。

AC Code:

#include <bits/stdc++.h>
using namespace std;
const int N=800+5;
int a[N*2];
int h[N*2];
int main()
{
    int t;
    cin >>t;
    while(t--)
    {
        memset(a,0,sizeof a);
        memset(h,0,sizeof h);
        int n;
        cin >>n;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int x;
                cin >>x;
                a[i+j]=x;
                h[x]++;
            }
        }
        for(int i=1;i<=n*2;i++)
        {
            if(h[i]==0)
            {
                a[1]=i;
                break;
            }
        }
        for(int i=1;i<=n*2;i++) cout <<a[i]<<" ";
        cout <<'\n';
    }
    return 0;
}