QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#689526 | #6606. The Boomsday Project | bright_ml | TL | 998ms | 583412kb | C++20 | 1.8kb | 2024-10-30 17:34:41 | 2024-10-30 17:34:45 |
Judging History
answer
//
// Created by 35395 on 2024/10/30.
//
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 510;
const int M = 100010;
array<int, 3> a[N];
pair<int, int> d[M];
#define PII pair<int,int>
#define fi first
#define se second
int b[3 * M];
int nxt[3 * M][N];//第i个位置用第j种边可以到达哪里
i64 dp[3 * M];
int du[3 * M];
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m, cost;
cin >> n >> m >> cost;
for (int i = 1; i <= n; i++) {
cin >> a[i][0] >> a[i][1] >> a[i][2];
}
for (int i = 1; i <= m; i++) {
cin >> d[i].fi >> d[i].se;
}
sort(a + 1, a + n + 1, [&](auto x, auto y) {
return x[2] * y[1] < y[2] * x[1];
});
sort(d + 1, d + 1 + m);
int idx = 0;
for (int i = 1; i <= m; i++) {
while (d[i].se) {
d[i].se--;
b[++idx] = d[i].fi;
}
}
for (int i = 1; i <= min(400,n); i++) {
for (int j = 1, r = -1; j <= idx; j++) {
while (r != idx && (r + 1 - j + 1 <= a[i][1] && b[r + 1] - b[j] + 1 <= a[i][0]))r++;
nxt[j][i] = r + 1;
du[r + 1]++;
}
}
idx++;
for (int i = 2; i <= idx; i++) {
du[i]++;
}
for (int i = 1; i < idx; i++) {
nxt[i][0] = i + 1;
}
for (int i = 0; i <= idx; i++) {
dp[i] = 1e18;
}
dp[1] = 0;
queue<int> q;
a[0][2] = cost;
q.push(1);
while (q.size()) {
auto t = q.front();
q.pop();
for (int i = 0; i <= min(400, n); i++) {
int j = nxt[t][i];
int w = a[i][2];
du[j]--;
if (du[j] == 0)q.push(j);
dp[j] = min(dp[j], dp[t] + w);
}
}
cout << dp[idx] << endl;
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 9760kb
input:
2 1 10 1 3 12 1 2 9 1 10
output:
42
result:
ok 1 number(s): "42"
Test #2:
score: 0
Accepted
time: 1ms
memory: 7652kb
input:
2 4 10 1 3 12 1 2 9 1 3 2 3 3 3 4 1
output:
45
result:
ok 1 number(s): "45"
Test #3:
score: 0
Accepted
time: 998ms
memory: 583412kb
input:
500 100 1000 95 20 20892 73 627 55354 52 747 1404314 19 676 597007 65 814 1569851 91 397 691575 81 4 4575 97 382 624404 21 197 201850 67 799 643576 27 895 1510533 3 800 552439 49 954 1149851 70 892 676406 82 882 1348956 1 318 324094 43 238 439111 94 397 471003 16 119 130686 1 637 77731 79 292 35234 ...
output:
450790
result:
ok 1 number(s): "450790"
Test #4:
score: -100
Time Limit Exceeded
input:
500 100 1000 8 910 1405086 65 931 697221 73 534 1051699 74 13 7497 64 631 991592 79 481 511568 92 892 477132 91 588 842013 21 389 750794 19 955 1333270 85 889 1334457 46 295 505372 83 486 449366 67 67 119659 82 446 408487 25 736 319997 31 889 23280 1 41 74813 93 928 1189573 88 468 455471 7 10 18865 ...
output:
3276270