結果

問題 No.3724 Domination
コンテスト
ユーザー karinohito
提出日時 2026-09-19 14:46:14
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,790 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,581 ms
コンパイル使用メモリ 353,596 KB
実行使用メモリ 11,264 KB
最終ジャッジ日時 2026-09-19 14:46:31
合計ジャッジ時間 13,902 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点 20 % AC * 7 WA * 1
満点 80 % AC * 51 WA * 1
合計 2.5 * 0% = 0 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

void solve(){
    ll N;
    cin>>N;

    vector<ll> P(N),Q(N);
    for(int i=0;i<N;i++){
        cin>>P[i];
        P[i]--;
    }
    for(int i=0;i<N;i++){
        cin>>Q[i];
        Q[i]--;
    }
    if(N==2){
        cout<<-1<<"\n";
        return;
    }
    auto OQ=Q;
    sort(OQ.begin(),OQ.end());
    if(OQ[0]==OQ.back()&&N<=4){
        cout<<-1<<"\n";
        return;
    }
    vector<vector<ll>> AN(N,vector<ll>(N,-1));
    vector<bool> US(N,0),USQ(N,0);
    for(int i=0;i<N;i++){
        if(i==0||OQ[i-1]!=OQ[i]){
            US[i]=1;
            USQ[OQ[i]]=1;
            int y=OQ[i];
            int x=i;
            for(int j=0;j<(N+2)/2;j++){
                AN[y][x]=y;
                x++;
                x%=N;
            }
        }
    }
    for(int i=0;i<N;i++){
        if(USQ[i])continue;
        for(int j=0;j<N;j++){
            if(!US[j]){
                US[j]=1;
                int y=i;
                int x=j;
                for(int j=0;j<(N+2)/2;j++){
                    AN[y][x]=y;
                    x++;
                    x%=N;
                }
                break;
            }
        }
    }
    vector<vector<int>> DD(N);
    for(int i=0;i<N;i++){
        DD[OQ[i]].push_back(i);
    }
    vector<int> QM(N);
    for(int i=0;i<N;i++){
        QM[i]=DD[Q[i]].back();
        DD[Q[i]].pop_back();
    }
    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++){
            if(AN[i][j]==-1)AN[i][j]=OQ[j];
        }
    }
    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++){
            cout<<AN[P[i]][QM[j]]+1<<" \n"[j==N-1];
        }
    }

}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin>>T;
    for(int t=0;t<T;t++)solve();
    
}
0