QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#163416 | #5507. Investors | ahsoltan | WA | 116ms | 3584kb | C++17 | 1.9kb | 2023-09-04 03:39:13 | 2023-09-04 03:39:13 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 2137
#endif
const int INF = 1e9;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int tt;
cin >> tt;
while (tt--) {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int inv = 0;
vector<vector<int>> e(n);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[j] < a[i]) {
++inv;
e[i + 1].push_back(inv);
e[j].push_back(-inv);
}
}
}
vector<vector<int>> c(n, vector<int>(n));
for (int i = 0; i < n; i++) {
set<int> s;
int cnt = 0;
for (int j = i; j < n; j++) {
for (int x : e[j]) {
if (x > 0) {
s.insert(x);
} else if (x < 0 && s.count(-x)) {
s.erase(-x);
cnt++;
}
}
c[i][j] = cnt;
}
}
vector<int> dp1(n), dp2(n);
auto solve = [&] (auto self, int l, int r, int kl, int kr) -> void {
if (l > r) {
return;
}
int mid = (l + r) / 2;
int mnv = INF;
int mnk = 0;
for (int i = kl; i <= min(mid - 1, kr); i++) {
int v = dp1[i] + (mid - 1 >= i + 1 ? c[i + 1][mid - 1] : 0);
if (v < mnv) {
mnv = v;
mnk = i;
}
}
dp2[mid] = mnv;
self(self, l, mid - 1, kl, mnk);
self(self, mid + 1, r, mnk, kr);
};
for (int i = 0; i < n; i++) {
dp1[i] = c[0][i];
}
for (int i = 0; i < k; i++) {
solve(solve, 0, n - 1, 0, n - 1);
swap(dp1, dp2);
}
int ans = INF;
for (int i = 0; i < n; i++) {
ans = min(ans, dp1[i] + (i < n - 1 ? c[i + 1][n - 1] : 0));
}
cout << ans << '\n';
}
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 3584kb
input:
2 6 1 4 5 6 2 2 1 6 2 4 5 6 2 2 1
output:
2 0
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 116ms
memory: 3580kb
input:
349 6 2 2 1 2 1 2 1 48 12 42 47 39 39 27 25 22 44 45 13 5 48 38 4 37 6 24 10 42 38 12 37 31 19 44 6 29 17 7 12 7 26 35 24 15 9 37 3 27 21 33 29 34 20 14 30 31 21 48 12 1 43 17 46 17 39 40 22 25 2 22 12 4 11 38 12 4 11 1 5 39 44 37 10 19 20 42 45 2 45 37 20 48 34 16 41 23 18 13 44 47 21 29 4 23 18 16...
output:
1 18 14 107 0 2 1 0 12 12 21 0 0 0 1 0 0 0 0 0 0 0 0 111 2 0 0 1 0 1000000000 0 0 0 0 1 1000000000 2 0 0 1 0 0 1 0 0 1 4 0 0 0 0 0 0 0 0 1 0 1 0 1000000000 8 193 0 0 31 2 0 1 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 8 1 8 0 0 0 0 1 10 3 0 0 0 6 0 1000000000 0 0 0 1 0 0...
result:
wrong answer 3rd lines differ - expected: '15', found: '14'