Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34045 | 申东铉 | 【S】T2 | C++ | 运行超时 | 0 | 1000 MS | 2404 KB | 1326 | 2024-11-03 13:53:06 |
#include <bits/stdc++.h> using namespace std; int T,n,L; int p[2000006]; int q[2000006]; int main () { cin >> T; while (T--) { cin >> n >> L; for (int i = 1;i <= n;i++) { cin >> p[i]; q[p[i]] = i; } bool b = 0; vector <int> vi,vj,vk; int x = q[1],y = -1; for (int i = x + 1;i <= n;i++) { if (p[1] > p[i]) { y = i; break; } } if (y == -1) { b = 1; } else if (x != 1) { vi.push_back(1); vj.push_back(x); vk.push_back(y); swap(p[1],p[x]); swap(q[p[1]],q[p[x]]); } x = q[n],y = -1; for (int i = x - 1;i >= 1;i--) { if (p[n] < p[i]) { y = i; break; } } if (b && y == -1) { cout << -1 << endl; continue; } if (y != -1 && x != 1) { vi.push_back(1); vj.push_back(x); vk.push_back(y); swap(p[1],p[x]); swap(q[p[1]],q[p[x]]); } for (int i = 2;i < n;i++) { if (p[i] == i) { continue; } int a = q[i]; vi.push_back(1); vj.push_back(i); vk.push_back(a); swap(p[i],p[a]); swap(q[p[i]],q[p[a]]); } int sz = vi.size(); if (sz > L) { cout << -1 << endl; continue; } cout << sz << endl; for (int i = 0;i < sz;i++) { cout << vi[i] << ' '; cout << vj[i] << ' '; cout << vk[i] << endl; } } return 0; }