結果
| 問題 | No.3724 Domination |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-19 16:56:27 |
| 言語 | C++23(gcc16) (gcc 16.1.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 71 ms / 2,000 ms |
| + 645µs | |
| コード長 | 2,405 bytes |
| 記録 | |
| コンパイル時間 | 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 点 |
ソースコード
#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();
}
}