QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#577840 | #9331. Maximize the Minimum | Afterlife# | WA | 41ms | 9720kb | C++20 | 2.2kb | 2024-09-20 15:02:50 | 2024-09-20 15:02:54 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
int n , m;
typedef long long ll;
typedef pair<int,ll> pil;
pil a[200005] , b[200005];
pil g[400005];
ll s;
ll sum[400005] ;
ll f[400005];
ll chk(int l) {
for(int i = 1;i <= n + m + 1;i++) f[i] = 2e18;
f[1] = 0;
int nxta = 1 , nxtb = 1;
int la = 1 , lb = 1;
for(int i = 1;i <= n + m;i++) {
if(nxta == i) nxta++ ;
if(nxtb == i) nxtb++ ;
if(la == i) la++ ;
if(lb == i) lb++ ;
while(nxta <= n+m+1 && (g[nxta].second < 0)) nxta++ ;
while(nxtb <= n+m+1 && (g[nxtb].second > 0)) nxtb++ ;
while(la <= n+m+1 && (g[la].second < 0 || g[la].first - g[i].first < l)) la++ ;
while(lb <= n+m+1 && (g[lb].second > 0 || g[lb].first - g[i].first < l)) lb++ ;
// printf("%d %lld %d %d\n",i,f[i],nxta,la);
if(g[i].second > 0) { /// a
f[nxta] = min(f[nxta] , f[i] + sum[nxta - 1] - sum[i]);
f[lb] = min(f[lb] , f[i] + sum[lb - 1] - sum[i]) ;
}
else {
f[nxtb] = min(f[nxtb] , f[i] + sum[nxtb - 1] - sum[i]);
f[la] = min(f[la] , f[i] + sum[la - 1] - sum[i]) ;
}
}
// cout << f[n + m + 1] << '\n';
return f[n + m + 1];
}
void solv() {
cin >> n >> m >> s;
for(int i = 1;i <= n;i++) cin >> a[i].first;
for(int i = 1;i <= m;i++) cin >> b[i].first;
for(int i = 1;i <= n;i++) cin >> a[i].second;
for(int i = 1;i <= m;i++) cin >> b[i].second;
sort(a + 1 , a + n + 1);
sort(b + 1 , b + m + 1);
int l = 0 , r = 2e9;
r = min(r , max(abs(a[1].first - b[m].first) , abs(a[n].first - b[1].first))) ;
// cout << a[n].first <<' ' << b[1].first << '\n';
for(int i = 1;i <= n;i++) g[i] = a[i];
for(int i = 1;i <= m;i++) g[i + n] = b[i] , g[i].second *= -1;
sort(g + 1 , g + n + m);
for(int i = 1;i <= n + m ;i++) {
sum[i] = sum[i - 1];
sum[i] += abs(g[i].second) ;
}
// chk(1) ; return ;
while(l < r) {
int md = ((ll)l + r) / 2 + 1;
if(chk(md) <= s) l = md;
else r = md - 1;
}
cout << l << '\n';
return ;
}
int main() {
ios::sync_with_stdio(false) ; cin.tie(0) ;
int t;cin >> t;
while(t--) solv() ;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 9704kb
input:
2 1 4 10 15 1 6 9 13 8 3 1 2 4 5 4 4 -1 5 3 2 -4 -7 8 6 2 2 3 1 1 2 3 1 1 1
output:
14 3
result:
ok 2 number(s): "14 3"
Test #2:
score: -100
Wrong Answer
time: 41ms
memory: 9720kb
input:
40000 5 3 4 1 -5 -2 -5 4 -3 -4 -4 4 8 2 4 7 5 3 7 5 3 6 -4 -7 -4 -1 -7 -4 -4 -2 6 8 3 4 5 5 3 5 5 3 6 -1 2 3 -4 -1 -1 -2 -3 8 3 4 3 2 2 5 2 5 3 4 -5 -2 3 -1 2 -3 0 -2 6 5 1 1 6 7 8 7 5 3 4 0 0 1 -4 -2 -4 -4 -3 7 7 5 8 3 8 2 4 5 3 4 0 -4 -1 1 -6 -2 -5 -4 7 4 5 7 3 5 5 2 5 3 6 -4 -3 0 2 -4 -5 -4 -4 6 ...
output:
1 3 1 0 0 1 1 1 0 1 0 1 3 3 0 1 0 0 1 1 3 0 0 0 2 0 1 1 1 1 1 2 2 2 1 0 2 1 1 1 2 1 1 2 0 4 1 1 1 0 0 1 0 1 1 2 0 1 0 2 1 0 0 0 1 2 2 1 7 0 2 4 4 5 0 1 0 1 2 1 2 0 2 0 2 3 2 0 4 1 1 3 0 1 3 1 2 2 1 1 2 4 1 3 2 0 1 1 0 1 1 3 1 1 0 3 2 2 2 1 0 1 0 1 0 0 3 0 1 0 4 0 0 0 1 1 2 2 0 2 1 3 4 1 1 1 0 1 1 2 ...
result:
wrong answer 2nd numbers differ - expected: '0', found: '3'