QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#739769#9730. Elevator IIir101WA 62ms3752kbC++202.3kb2024-11-12 23:02:252024-11-12 23:02:25

Judging History

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

  • [2024-11-12 23:02:25]
  • 评测
  • 测评结果:WA
  • 用时:62ms
  • 内存:3752kb
  • [2024-11-12 23:02:25]
  • 提交

answer

#include<bits/stdc++.h>
#define ll __int128
#define PII pair<int,int>
#define endl '\n'
#define int long long
#define  lc p<<1
#define  rc p<<1|1
using namespace  std;
const int N=1e6+10;
bool cmp(array<int,3>x,array<int,3>y){
    return x[0]<y[0];
}
bool cmp1(array<int,3>x,array<int,3>y){
    return x[1]>y[1];
}
void solve() {
    int n,f;
    cin>>n>>f;
    vector<array<int,3>>a,b;
    priority_queue<array<int,3>>pp;
    for (int i = 1; i <=n ; ++i) {
        int x,y;
        cin>>x>>y;
        if(x>=f)a.push_back({x,y,i});
        else pp.push({y,x,i});
    }
    sort(a.begin(), a.end(),cmp);
    std::reverse(a.begin(), a.end());
    int dq=f;
    int ans=0;
    int mt=-1;
    vector<int>p;
    while(pp.size() and pp.top()[0]>dq){
        mt=pp.top()[2];
        ans+=pp.top()[0]-pp.top()[1];
        dq=pp.top()[0];
        pp.pop();
        p.push_back(mt);
        while (a.size() and a.back()[0]<dq){
            auto [x,y,z]=a.back();
            pp.push({y,x,z});
            a.pop_back();
        }
    }
    while(pp.size()){
        auto [x,y,z]=pp.top();
        b.push_back({y,x,z});
        pp.pop();
    }
    sort(a.begin(), a.end(),cmp1);
    vector<int>mn;
    int mi=0;
    for (int i = 0; i <a.size() ; ++i) {
        if(a[mi][0]>a[i][0])mi=i;
        mn.push_back(mi);
    }
    int pos=(int)a.size()-1;
    vector<int>cnt(n+1);
    while(pos>=0){
        while (pos>=0 and a[pos][0]<=dq){
            ans+=a[pos][1]-a[pos][0];
            p.push_back(a[pos][2]);
            cnt[pos]=1;
            dq=a[pos][1];
            pos--;
        }
        if(pos<0)break;
        ans+=max(a[mn[pos]][1]-dq,0ll);
        dq=a[mn[pos]][1];
        cnt[mn[pos]]=1;
        p.push_back(a[mn[pos]][2]);
        pos=mn[pos]-1;
    }
    for (int i = 0; i <a.size() ; ++i) {
        if(!cnt[i]){
            b.push_back(a[i]);
        }
    }
    sort(b.begin(), b.end(),cmp);
    reverse(b.begin(), b.end());
    for(auto [l,r,idx]:b){
        p.push_back(idx),ans+=r-l;
    }
    cout<<ans<<endl;
    for(auto i:p){
        cout<<i<<' ';
    }
    cout<<endl;








}
signed main(){
    ios::sync_with_stdio(false),cin.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3556kb

input:

2
4 2
3 6
1 3
2 7
5 6
2 5
2 4
6 8

output:

11
2 3 4 1 
5
2 1 

result:

ok ok 2 cases (2 test cases)

Test #2:

score: -100
Wrong Answer
time: 62ms
memory: 3752kb

input:

6100
19 52
51 98
2 83
40 58
96 99
39 55
72 94
15 17
4 15
48 99
2 99
77 78
35 77
44 62
79 81
30 31
1 48
48 76
68 99
60 66
6 19
44 53
64 92
17 28
67 98
9 99
40 65
16 27
99 100
15 56
4 6
24 97
84 96
47 49
37 38
77 79
13 40
13 92
71 100
47 93
90 91
72 81
15 48
32 71
19 17
95 99
10 23
18 100
90 93
52 92
...

output:

524
9 4 14 11 6 18 19 1 17 13 3 5 12 15 7 8 2 10 16 
194
5 4 2 1 6 3 
397
4 11 1 13 5 8 14 6 12 7 16 15 2 9 10 3 
733
15 3 1 4 17 8 16 5 12 10 19 13 14 6 11 7 18 9 2 
244
3 6 2 8 12 4 14 5 10 11 1 15 9 13 7 
422
18 11 10 6 7 2 13 20 4 8 5 15 9 16 14 1 19 3 12 17 
104
4 1 3 2 
187
4 8 2 3 1 5 6 9 10 ...

result:

wrong answer Participant declares the cost to be 311, but the plan actually costs 370 (test case 44)