QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#703240 | #9529. Farm Management | Murphy_ | WA | 1ms | 8028kb | C++11 | 2.6kb | 2024-11-02 17:25:38 | 2024-11-02 17:25:40 |
Judging History
answer
#include <bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
struct node {
int w,l,r,t;
}q[N];
bool cmp(node x,node y){return x.w<=y.w;}
ll t_l[N],sum1[N],total,w_t,ans;
ll r_t[N],sum2[N];
signed main() {
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) {
scanf("%d%d%d",&q[i].w,&q[i].l,&q[i].r);
q[i].t=q[i].r;
total+=(ll)q[i].r;
}
sort(q+1,q+1+n,cmp);
ll res=total-m;
for(int i=1;i<=n;++i) {
if(res) {
int x = q[i].t-q[i].l;
int sub = (x<=res)?x:res;
q[i].t-=sub;
res-=sub;
}
}
for(int i=1;i<=n;++i) {
t_l[i]=t_l[i-1]+(ll)(q[i].t-q[i].l);
sum1[i]=sum1[i-1]+q[i].w*(ll)(q[i].t-q[i].l);
r_t[i]=r_t[i-1]+(ll)(q[i].r-q[i].t);
sum2[i]=sum2[i-1]+q[i].w*(ll)(q[i].r-q[i].t);
w_t+=q[i].w*(ll)q[i].t;
}
// cout<<endl;
// for(int i=1;i<=n;++i) cout<<t_l[i]<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<q[i].w<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<q[i].l<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<q[i].r<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<q[i].t<<' ';cout<<endl;cout<<endl;
// for(int i=1;i<=n;++i) cout<<t_l[i]<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<sum1[i]<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<r_t[i]<<' ';cout<<endl;
// for(int i=1;i<=n;++i) cout<<sum2[i]<<' ';cout<<endl;cout<<endl;
ans=w_t;
// cout<<ans<<endl;
for(int i=1;i<=n;++i) {
ll pre = t_l[i-1];
ll sub = sum1[i-1]+q[i].w*(ll)q[i].t;
ll ti = q[i].t + pre;
ll find = r_t[n]-(ll)ti;
int idx = upper_bound(r_t+1+i,r_t+1+n+1,find)-r_t;
// idx = (idx > n)?n:idx;
// cout<<i<<": "<<pre<<", "<<sub<<", "<<ti<<" {}"<<find<<", "<<idx<<" ***** ";
// if(idx == n) {
// mor = min(r_t[n]-r_t[n-1],ti);
// add = mor * q[n].w;
// }
if(idx == n+1) {
ans = max(ans, w_t-sub+ti*(ll)q[i].w);
break;
}
ll mor=0;
ll add=0;
if(idx<n) {
mor = r_t[n]-r_t[idx];
add = sum2[n]-sum2[idx];
}
// cout<<" "<<mor<<", "<<add<<" [] ";
if(idx>i+1) {
// mor+=ti-(r_t[n]-r_t[idx+1]);
ll x=min(ti-mor,r_t[idx]-r_t[idx-1]);
add += x*(ll)q[idx].w;
mor+=x;
}
int res = ti-mor;
ans=max(ans,w_t-sub+add+res*(ll)q[i].w);
// cout<<mor<<", "<<add<<", "<<res<<", "<<ans<<endl;
}
printf("%lld",ans);
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 8028kb
input:
5 17 2 3 4 6 1 5 8 2 4 4 3 3 7 5 5
output:
109
result:
ok single line: '109'
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 5840kb
input:
12 62 503792 9 10 607358 1 3 600501 10 10 33249 4 4 774438 6 6 197692 3 6 495807 8 8 790225 5 9 77272 3 8 494819 4 9 894779 3 9 306279 5 6
output:
34859047
result:
wrong answer 1st lines differ - expected: '35204500', found: '34859047'