QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#702319#9529. Farm ManagementMurphy_WA 1ms7888kbC++112.2kb2024-11-02 15:44:152024-11-02 15:44:16

Judging History

你现在查看的是最新测评结果

  • [2024-11-02 15:44:16]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:7888kb
  • [2024-11-02 15:44:15]
  • 提交

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+=(ll)(q[i].w*q[i].t);
    }
    // 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;

    for(int i=1;i<=n;++i) {
        int pre = t_l[i-1]; 
        ll sub = sum1[i-1]+q[i].w*q[i].t;
        int ti = q[i].t + pre;
        ll find = r_t[n]-(ll)ti;
        int idx = upper_bound(r_t+1+i+1,r_t+1+n,find)-r_t;
        // cout<<i<<": "<<pre<<", "<<sub<<", "<<ti<<" {}"<<find<<", "<<idx<<" ***** ";
        int mor=0;
        ll add=0;
        if(idx<n) {
            mor = r_t[n]-r_t[idx+1];
            add = sum2[n]-sum2[idx+1];
        }
        // cout<<"     "<<mor<<", "<<add<<" [] ";
        if(idx>i+1) {
            // mor+=ti-(r_t[n]-r_t[idx+1]);
            add += (ll)(ti-mor)*(ll)q[idx].w;
            mor=ti;
        }
        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: 1ms
memory: 5928kb

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: 0
Accepted
time: 0ms
memory: 7852kb

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:

35204500

result:

ok single line: '35204500'

Test #3:

score: -100
Wrong Answer
time: 0ms
memory: 7888kb

input:

15 32
835418 2 3
178262 1 3
527643 2 2
519710 1 1
774544 3 3
82312 1 1
808199 1 1
809396 1 3
255882 1 3
80467 1 3
874973 1 3
813965 1 2
198275 1 2
152356 1 3
802055 1 1

output:

22021708

result:

wrong answer 1st lines differ - expected: '22000255', found: '22021708'