結果

問題 No.3724 Domination
コンテスト
ユーザー Rumain831
提出日時 2026-09-19 15:42:55
言語 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  
実行時間 130 ms / 2,000 ms
+ 812µs
コード長 1,495 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,244 ms
コンパイル使用メモリ 188,040 KB
実行使用メモリ 9,904 KB
最終ジャッジ日時 2026-09-19 15:43:24
合計ジャッジ時間 13,748 ms
ジャッジサーバーID
(参考情報)
judge5_0 / judge3_1
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点 20 % AC * 8
満点 80 % AC * 52
合計 2.5 * 100% = 250 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;

void Print(vector<vector<int>>& ans){
  int n=ans.size(), m=ans[0].size();
  for(int i=0; i<n; i++)for(int j=0; j<m; j++){
    cout << ans[i][j] << (j==m-1?'\n':' ');
  }
  return;
}

void naive(int n, vector<int> r, vector<int> c){
  vector<int> p(n);
  for(int i=0; i<n; i++) p[i]=i;
  {
    int x=c[0];
    bool ng=true;
    for(int i=1; i<n; i++)if(c[i]!=x){ng=false; break;}
    if(ng){
      cout << -1 << endl; return;
    }
  } 
  do{
    vector ans(n, vector<int>(n, -1));
    for(int i=0; i<n; i++)for(int j=0; j<n; j++){
      if(j!=p[i]) ans[i][j]=r[i];
      else ans[i][j]=c[j];
    }
    bool ok=true;
    for(int j=0; j<n; j++){
      int x=0;
      for(int i=0; i<n; i++)if(ans[i][j]==c[j]) x++;
      if(x==1){ok=false; break;}
    }
    if(ok){
      Print(ans); return;
    }
  }while(next_permutation(begin(p), end(p)));
  cout << -1 << endl;
}

void solve(){
  int n; cin >> n;
  vector<int> r(n), c(n);
  for(auto&x:r) cin >> x;
  for(auto&x:c) cin >> x;
  if(n<=2){
    cout << (n==1?1:-1) << endl; return;
  }
  if(n<=4){
    naive(n, r, c); return;
  }
  vector ans(n, vector<int>(n, -1));
  for(int i=0; i<n; i++){
    for(int j=0; j<n-2; j++){
      int nj=(i+j)%n;
      ans[i][nj]=r[i];
    }
  }
  for(int j=0; j<n; j++)for(int i=0; i<n; i++)if(ans[i][j]==-1) ans[i][j]=c[j];
  Print(ans);
}

int main(void){
  int t; cin >> t;
  while(t--) solve();
  return 0; 
}
0