Submission #70832875
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
vector<int> sq(vector<int> a) {
int n = a.size();
vector<int> res(n);
for (int i = 0; i < n; i++) {
res[i] = a[a[i]];
}
return res;
}
vector<int> brute(vector<int> a) {
int n = a.size();
vector<int> ans(n, n-1);
auto dfs = [&] (this auto dfs, int i) {
if (i == n) {
ans = min(ans, sq(a));
return;
}
if (a[i] != -1) dfs(i+1);
else {
for (int x = 0; x < n; x++) {
a[i] = x;
dfs(i+1);
}
a[i] = -1;
}
};
dfs(0);
return ans;
}
vector<int> solve(vector<int> a) {
vector<int> oa = a;
int n = a.size();
if (a[0] <= 0) {
for (auto& x: a) {
if (x == -1) x = 0;
}
return sq(a);
}
int idx = n;
set<int> pos;
for (int i = 0; i < n; i++) {
if (a[i] == 0) idx = min(idx, i);
if (a[i] == -1) {
pos.emplace(i);
}
}
if (pos.empty()) return sq(a);
auto finalize = [&] (vector<int> p, int f) -> vector<int> {
// cout << "Finalizing with ";
// for (int x: p) cout << x << ' ';
// cout << "and " << f << "\n";
if (p.empty()) {
// for (auto& x: a) cout << x << ' ';
// cout << "\n";
// cout << f << '\n';
pair<int, int> best = {n-1, n-1};
for (int i = 0; i < n; i++) {
if (i != f) {
best = min(best, make_pair(a[i], i));
}
}
best = min(best, make_pair(f, f));
// cout << "Best is " << best.second << "\n";
a[f] = best.second;
vector<int> res = sq(a);
a[f] = 0;
res = min(res, sq(a));
return res;
}
vector<int> b = a;
for (int x: p) b[x] = f;
b[f] = 0;
vector<int> res = sq(b);
if (idx < n) {
for (int x: p) b[x] = idx;
b[f] = idx;
res = min(res, sq(b));
b[f] = 0;
res = min(res, sq(b));
}
return res;
};
vector<int> queued;
vector<int> in_queue(n);
for (int i = 0; i < n; i++) {
// cout << "i = " << i << ' ' << a[i] << "\n";
// for (auto x: a) cout << x << ' ';
// cout << "\n";
// for (int x: queued) cout << x << ' ';
// cout << "\n";
// cout << "pos size = " << pos.size() << "\n";
if (a[i] != -1 && a[a[i]] == -1) {
if (!in_queue[a[i]]) {
if (pos.size() == 1) return finalize(queued, a[i]);
a[a[i]] = 0;
idx = min(idx, a[i]);
pos.erase(a[i]);
continue;
}
int v = *pos.lower_bound(i);
if (v == *pos.rbegin()) {
return finalize(queued, v);
}
v = min(v, idx);
a[v] = 0;
pos.erase(v);
idx = min(idx, v);
for (int x: queued) {
a[x] = v;
in_queue[x] = 0;
pos.erase(x);
}
queued.clear();
}
else if (a[i] == -1) {
// cout << "Visiting " << i << "\n";
if (i == *pos.rbegin()) {
return finalize(queued, i);
}
else {
pos.erase(i);
queued.push_back(i);
in_queue[i] = 1;
}
}
}
if (count(a.begin(), a.end(), -1) != 0) {
cout << "Error\n";
for (auto x: oa) cout << x << ' ';
cout << '\n';
exit(0);
}
return sq(a);
}
int main () {
ios_base::sync_with_stdio(0); cin.tie(0);
// vector<int> res = solve({2, -1, 1, -1, -1, 6, -1});
// for (auto x: res) cout << x << ' ';
// cout << '\n';
// return 0;
// for (int n = 1; n <= 8; n++) {
// vector<int> cur;
// auto dfs = [&] (this auto dfs) {
// if ((int)cur.size() == n) {
// auto res1 = brute(cur);
// auto res2 = solve(cur);
// if (res1 != res2) {
// cout << "Mismatch on ";
// for (auto x: cur) cout << x << ' ';
// cout << "\n";
// cout << "Brute: ";
// for (auto x: res1) cout << x << ' ';
// cout << "\n";
// cout << "Solve: ";
// for (auto x: res2) cout << x << ' ';
// cout << "\n";
// exit(0);
// }
// return;
// }
// for (int x = -1; x < n; x++) {
// if (x == -1 && count(cur.begin(), cur.end(), -1) >= 3) continue;
// cur.push_back(x);
// dfs();
// cur.pop_back();
// }
// };
// dfs();
// }
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> a(n);
for (auto& x: a) {
cin >> x;
if (x != -1) x--;
}
vector<int> res = solve(a);
for (int i = 0; i < n; i++) {
cout << res[i]+1 << " \n"[i==n-1];
}
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - A_A_i |
| User | AndrewG |
| Language | C++23 (GCC 15.2.0) |
| Score | 900 |
| Code Size | 4671 Byte |
| Status | AC |
| Exec Time | 174 ms |
| Memory | 28220 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 900 / 900 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt |
| All | 00_sample_00.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt, 01_test_51.txt, 01_test_52.txt, 01_test_53.txt, 01_test_54.txt, 01_test_55.txt, 01_test_56.txt, 01_test_57.txt, 01_test_58.txt, 01_test_59.txt, 01_test_60.txt, 01_test_61.txt, 01_test_62.txt, 01_test_63.txt, 01_test_64.txt, 01_test_65.txt, 01_test_66.txt, 01_test_67.txt, 01_test_68.txt, 01_test_69.txt, 01_test_70.txt, 01_test_71.txt, 01_test_72.txt, 01_test_73.txt, 01_test_74.txt, 01_test_75.txt, 01_test_76.txt, 01_test_77.txt, 01_test_78.txt, 01_test_79.txt, 01_test_80.txt, 01_test_81.txt, 01_test_82.txt, 01_test_83.txt, 01_test_84.txt, 01_test_85.txt, 01_test_86.txt, 01_test_87.txt, 01_test_88.txt, 01_test_89.txt, 01_test_90.txt, 01_test_91.txt, 01_test_92.txt, 01_test_93.txt, 01_test_94.txt, 01_test_95.txt, 01_test_96.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3456 KiB |
| 01_test_00.txt | AC | 42 ms | 3604 KiB |
| 01_test_01.txt | AC | 21 ms | 3512 KiB |
| 01_test_02.txt | AC | 5 ms | 4160 KiB |
| 01_test_03.txt | AC | 131 ms | 21440 KiB |
| 01_test_04.txt | AC | 120 ms | 19900 KiB |
| 01_test_05.txt | AC | 34 ms | 11324 KiB |
| 01_test_06.txt | AC | 12 ms | 6092 KiB |
| 01_test_07.txt | AC | 63 ms | 12864 KiB |
| 01_test_08.txt | AC | 53 ms | 11464 KiB |
| 01_test_09.txt | AC | 13 ms | 6916 KiB |
| 01_test_10.txt | AC | 19 ms | 8448 KiB |
| 01_test_11.txt | AC | 9 ms | 5712 KiB |
| 01_test_12.txt | AC | 28 ms | 11372 KiB |
| 01_test_13.txt | AC | 39 ms | 14916 KiB |
| 01_test_14.txt | AC | 40 ms | 16376 KiB |
| 01_test_15.txt | AC | 20 ms | 8476 KiB |
| 01_test_16.txt | AC | 43 ms | 3572 KiB |
| 01_test_17.txt | AC | 42 ms | 3420 KiB |
| 01_test_18.txt | AC | 42 ms | 3548 KiB |
| 01_test_19.txt | AC | 43 ms | 3640 KiB |
| 01_test_20.txt | AC | 43 ms | 3600 KiB |
| 01_test_21.txt | AC | 42 ms | 3420 KiB |
| 01_test_22.txt | AC | 43 ms | 3600 KiB |
| 01_test_23.txt | AC | 42 ms | 3596 KiB |
| 01_test_24.txt | AC | 43 ms | 3572 KiB |
| 01_test_25.txt | AC | 43 ms | 3636 KiB |
| 01_test_26.txt | AC | 42 ms | 3552 KiB |
| 01_test_27.txt | AC | 43 ms | 3572 KiB |
| 01_test_28.txt | AC | 42 ms | 3512 KiB |
| 01_test_29.txt | AC | 42 ms | 3600 KiB |
| 01_test_30.txt | AC | 42 ms | 3508 KiB |
| 01_test_31.txt | AC | 42 ms | 3548 KiB |
| 01_test_32.txt | AC | 42 ms | 3572 KiB |
| 01_test_33.txt | AC | 42 ms | 3572 KiB |
| 01_test_34.txt | AC | 43 ms | 3428 KiB |
| 01_test_35.txt | AC | 43 ms | 3572 KiB |
| 01_test_36.txt | AC | 35 ms | 3760 KiB |
| 01_test_37.txt | AC | 35 ms | 3896 KiB |
| 01_test_38.txt | AC | 36 ms | 3728 KiB |
| 01_test_39.txt | AC | 35 ms | 3896 KiB |
| 01_test_40.txt | AC | 35 ms | 3768 KiB |
| 01_test_41.txt | AC | 35 ms | 3828 KiB |
| 01_test_42.txt | AC | 35 ms | 3896 KiB |
| 01_test_43.txt | AC | 35 ms | 3828 KiB |
| 01_test_44.txt | AC | 35 ms | 3676 KiB |
| 01_test_45.txt | AC | 36 ms | 3656 KiB |
| 01_test_46.txt | AC | 35 ms | 3684 KiB |
| 01_test_47.txt | AC | 36 ms | 3828 KiB |
| 01_test_48.txt | AC | 35 ms | 3884 KiB |
| 01_test_49.txt | AC | 35 ms | 3860 KiB |
| 01_test_50.txt | AC | 35 ms | 3828 KiB |
| 01_test_51.txt | AC | 36 ms | 3684 KiB |
| 01_test_52.txt | AC | 35 ms | 3684 KiB |
| 01_test_53.txt | AC | 36 ms | 3676 KiB |
| 01_test_54.txt | AC | 35 ms | 3888 KiB |
| 01_test_55.txt | AC | 35 ms | 3676 KiB |
| 01_test_56.txt | AC | 36 ms | 4308 KiB |
| 01_test_57.txt | AC | 35 ms | 4348 KiB |
| 01_test_58.txt | AC | 43 ms | 4644 KiB |
| 01_test_59.txt | AC | 38 ms | 4332 KiB |
| 01_test_60.txt | AC | 41 ms | 4444 KiB |
| 01_test_61.txt | AC | 34 ms | 4288 KiB |
| 01_test_62.txt | AC | 38 ms | 4588 KiB |
| 01_test_63.txt | AC | 38 ms | 4492 KiB |
| 01_test_64.txt | AC | 40 ms | 4316 KiB |
| 01_test_65.txt | AC | 36 ms | 4400 KiB |
| 01_test_66.txt | AC | 39 ms | 4328 KiB |
| 01_test_67.txt | AC | 35 ms | 4056 KiB |
| 01_test_68.txt | AC | 37 ms | 4528 KiB |
| 01_test_69.txt | AC | 35 ms | 4532 KiB |
| 01_test_70.txt | AC | 38 ms | 4328 KiB |
| 01_test_71.txt | AC | 41 ms | 4532 KiB |
| 01_test_72.txt | AC | 34 ms | 4460 KiB |
| 01_test_73.txt | AC | 37 ms | 4412 KiB |
| 01_test_74.txt | AC | 38 ms | 4240 KiB |
| 01_test_75.txt | AC | 39 ms | 4380 KiB |
| 01_test_76.txt | AC | 34 ms | 13072 KiB |
| 01_test_77.txt | AC | 34 ms | 13116 KiB |
| 01_test_78.txt | AC | 66 ms | 20680 KiB |
| 01_test_79.txt | AC | 40 ms | 17012 KiB |
| 01_test_80.txt | AC | 41 ms | 13024 KiB |
| 01_test_81.txt | AC | 109 ms | 23648 KiB |
| 01_test_82.txt | AC | 34 ms | 13120 KiB |
| 01_test_83.txt | AC | 39 ms | 16868 KiB |
| 01_test_84.txt | AC | 34 ms | 13072 KiB |
| 01_test_85.txt | AC | 42 ms | 16880 KiB |
| 01_test_86.txt | AC | 38 ms | 13008 KiB |
| 01_test_87.txt | AC | 40 ms | 16996 KiB |
| 01_test_88.txt | AC | 39 ms | 17016 KiB |
| 01_test_89.txt | AC | 40 ms | 17012 KiB |
| 01_test_90.txt | AC | 34 ms | 13120 KiB |
| 01_test_91.txt | AC | 174 ms | 28220 KiB |
| 01_test_92.txt | AC | 34 ms | 13120 KiB |
| 01_test_93.txt | AC | 34 ms | 12952 KiB |
| 01_test_94.txt | AC | 142 ms | 22608 KiB |
| 01_test_95.txt | AC | 41 ms | 13052 KiB |
| 01_test_96.txt | AC | 14 ms | 4300 KiB |