結果

問題 No.3724 Domination
コンテスト
ユーザー 李柏霆
提出日時 2026-09-19 16:56:27
言語 C++23(gcc16)
(gcc 16.1.0 + boost 1.92.0 + ACL)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 71 ms / 2,000 ms
+ 645µs
コード長 2,405 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,690 ms
コンパイル使用メモリ 373,176 KB
実行使用メモリ 10,032 KB
最終ジャッジ日時 2026-09-19 16:56:44
合計ジャッジ時間 15,822 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点 20 % AC * 8
満点 80 % AC * 52
合計 2.5 * 100% = 250 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;

int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    //start here
    int tt;cin >> tt;
    while(tt--){
        int N;cin >> N;
        vector<int> R(N);
        vector<int> C(N);
        for(auto &i:R) cin >> i;
        for(auto &i:C) cin >> i;
        if(N == 1){
            if(R[0] == C[0]) {
                cout << R[0] << '\n';
            }else{
                cout << "-1\n";
            }
            continue;
        }else if(N == 2){
            cout << "-1\n";
            continue;
        }
        vector<vector<int>> grid(N,vector<int>(N,0));
        auto print_ans = [&](){
            for(auto &i:grid){
                for(auto &j:i) cout << j << " ";
                cout << '\n';
            }
        };
        vector<int> loc(N+1);
        for(int i = 0;i < N;i++){
            loc[R[i]] = i;
        }
        for(int i = 0;i < N;i++){
            for(int j = 0;j < N;j++){
                grid[i][j] = R[i];
            }
        }
        if(N <= 4){
            vector<int> perm;
            for(int i = 1;i <= N;i++) perm.push_back(i);
            bool findAns = false;
            do{
                bool valid = true;
                for(int i = 0;i < N;i++) {
                    if(perm[i] == C[i]) valid = false;
                }
                if(valid == true){
                    for(int i = 0;i < N;i++){
                        grid[loc[perm[i]]][i] = C[i];
                    }
                    print_ans();
                    findAns = true;
                    break;
                }

            }while(next_permutation(perm.begin(),perm.end()));

            if(!findAns) cout << "-1\n";
            continue;
        }

        priority_queue<pair<int,int>> pq;
        for(int i = 1;i <= N;i++) pq.push({(N-1)/2,i});
        for(int i = 0;i < N;i++){
            vector<pair<int,int>> after;
            while(true){
                auto [remain,x] = pq.top();
                pq.pop();
                if(x == C[i]){
                    after.push_back({remain,x});
                    continue;
                }else{
                    remain--;
                    grid[loc[x]][i] = C[i];
                    after.push_back({remain,x});
                    break;
                }
            }
            for(auto tk:after) pq.push(tk);
        }
        print_ans();
    }
}
0