結果

問題 No.3724 Domination
コンテスト
ユーザー kukone
提出日時 2026-09-19 16:09:38
言語 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
結果
AC  
実行時間 126 ms / 2,000 ms
+ 960µs
コード長 3,004 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,124 ms
コンパイル使用メモリ 378,852 KB
実行使用メモリ 11,648 KB
最終ジャッジ日時 2026-09-19 16:09:55
合計ジャッジ時間 16,113 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点 20 % AC * 8
満点 80 % AC * 52
合計 2.5 * 100% = 250 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#ifndef ONLINE_JUDGE
#define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using ll=long long;
using ld=long double;
using st=string;
using P=pair<ll,ll>;
typedef atcoder::modint mint;
ll inf=9e18;
template<typename T, int s, int i = 0>
auto vec(const ll (&sizes)[s], const T& init = T()){
  if constexpr(i < s) return vector(sizes[i], vec<T, s, i+1>(sizes, init));
  else return init;
}


int main(){
  ll t;
  cin>>t;
  for(ll T=0;T<t;T++){
    ll n;
    cin>>n;
    auto r=vec<ll>({n},0);
    auto c=vec<ll>({n},0);
    for(ll i=0;i<n;i++){
      cin>>r[i];
    }
    for(ll i=0;i<n;i++){
      cin>>c[i];
    }
    auto ans=vec<ll>({n,n},0);
    for(ll i=0;i<n;i++){
      for(ll j=0;j<n;j++){
        ans[i][j]=r[i];
      }
    }
    auto tr=vec<ll>({n},0);
    for(ll i=0;i<n;i++){
      tr[r[i]-1]=i;
    }
    if(n>=4){
      if(n==4){
        for(ll i=0;i<n-1;i++){
          if(c[i]!=c[i+1]) goto A;
        }
        cout<<"-1\n";
        continue;
      }
      A:;
      auto v=vec<ll>({n},1);
      for(ll i=0;i<n;i++){
        ans[(tr[c[i]-1]+v[c[i]-1])%n][i]=c[i];
        v[c[i]-1]++;
        if(v[c[i]-1]==n) v[c[i]-1]=1;
      }
      for(ll i=0;i<n;i++){
        for(ll j=0;j<n;j++){
          cout<<ans[i][j]<<" ";
        }
        cout<<"\n";
      }
    }else if(n==3){
      ll v[3];v[0]=0;v[1]=0;v[2]=0;
      bool f=0;
      v[c[0]-1]++;v[c[1]-1]++;v[c[2]-1]++;
      if(v[0]==2){
        for(ll i=0;i<3;i++){
          if(c[i]!=1){
            ans[tr[0]][i]=c[i];
          }
          else{
            if(f) ans[tr[1]][i]=c[i];
            else{ans[tr[2]][i]=c[i];f=1;}
          }
        }
        for(ll i=0;i<n;i++){
          for(ll j=0;j<n;j++){
            cout<<ans[i][j]<<" ";
          }
          cout<<"\n";
        }
      }else if(v[1]==2){
        for(ll i=0;i<3;i++){
          if(c[i]!=2){
            ans[tr[1]][i]=c[i];
          }
          else{
            if(f) ans[tr[0]][i]=c[i];
            else{ans[tr[2]][i]=c[i];f=1;}
          }
        }
        for(ll i=0;i<n;i++){
          for(ll j=0;j<n;j++){
            cout<<ans[i][j]<<" ";
          }
          cout<<"\n";
        }
      }else if(v[2]==2){
        for(ll i=0;i<3;i++){
          if(c[i]!=3){
            ans[tr[2]][i]=c[i];
          }
          else{
            if(f) ans[tr[0]][i]=c[i];
            else{ans[tr[1]][i]=c[i];f=1;}
          }
        }
        for(ll i=0;i<n;i++){
          for(ll j=0;j<n;j++){
            cout<<ans[i][j]<<" ";
          }
          cout<<"\n";
        }
      }else if(v[0]==3||v[1]==3||v[2]==3){
        cout<<-1<<"\n";
      }else{
        auto v=vec<ll>({n},1);
        for(ll i=0;i<n;i++){
          ans[(tr[c[i]-1]+v[c[i]-1])%n][i]=c[i];
          v[c[i]-1]++;
        }
        for(ll i=0;i<n;i++){
          for(ll j=0;j<n;j++){
            cout<<ans[i][j]<<" ";
          }
          cout<<"\n";
        }
      }
    }else{
      if(n==2) cout<<"-1\n";
      else cout<<"1\n";
    }

  }
}
0