QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#678390 | #9528. New Energy Vehicle | ucup-team5052# | WA | 1ms | 5656kb | C++14 | 960b | 2024-10-26 14:47:12 | 2024-10-26 14:47:13 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m;
long long a[N], x[N], t[N], sa;
inline bool Chk(long long mid) {
long long sum = 0;
int s = m;
while (s >= 1 && x[s] > mid) s--;
long long curp = mid;
//cout << "mid = " << mid << endl;
for (int i = s;i >= 0;i--) {
if (sum + curp - x[i] > sa) return 0;
//cout << i << " " << sum << endl;
sum += curp - x[i];
curp = x[i];
if (i != 0) sum -= min(sum, a[t[i]]);
}
return 1;
}
int main() {
std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt;
cin >> tt;
while (tt--) {
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> a[i];
for (int i = 1;i <= m;i++) cin >> x[i] >> t[i];
x[0] = 0;
sa = 0;
for (int i = 1;i <= n;i++) sa += a[i];
long long l = 0, r = 1e18;
while (l < r - 1) {
long long mid = l + r >> 1;
if (Chk(mid)) l = mid;
else r = mid;
}
cout << l << endl;
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 5656kb
input:
2 3 1 3 3 3 8 1 2 2 5 2 1 2 2 1
output:
12 9
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3636kb
input:
6 3 2 2 2 2 6 1 7 1 2 2 3 3 2 1 6 2 2 3 2 2 5 1 7 2 9 1 2 2 3 3 2 1 6 2 1 1 999999999 1000000000 1 1 1 1000000000 1000000000 1
output:
10 11 4 11 999999999 2000000000
result:
wrong answer 1st lines differ - expected: '9', found: '10'