QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#46750#1173. Knowledge Is...idkwhatimdoingWA 2ms3636kbC++2.0kb2022-08-31 22:55:062022-08-31 22:55:09

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-08-31 22:55:09]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3636kb
  • [2022-08-31 22:55:06]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
struct tasks{
  int l,r,idx;
}; vector<tasks> a;
int n,m;
vector<int> worker;
bool init_comp(tasks a,tasks b){
    return a.l<b.l;
}
struct comp{
  bool operator()(tasks a,tasks b){
      return a.l>b.l;
  }
};
priority_queue<tasks, vector<tasks>, comp> from,to;
/*
 * from : 매칭할 때 앞에 올만한 작업
 * to : 매칭할 때 뒤에 오는 작업
 * 각각 끝나는 시점 기준으로 정렬
 */
int main(){
    cin>>n>>m;
    int match_cnt=0;
    a.resize(n);
    worker.resize(n);
    int i,j,l;
    for(i=0;i<n;i++){
        cin>>a[i].l>>a[i].r;
        a[i].idx=i;
    }
    sort(a.begin(),a.end(),init_comp); // 구간 시작 기준으로 정렬
    for(i=0;i<n;i++){
        if(!from.empty() && from.top().r<a[i].l){ // 만약 앞에 오는 작업이랑 매칭 가능하다면?
            worker[from.top().idx]=worker[a[i].idx]=++match_cnt; // 두 작업을 같은 worker에 배정
            from.pop(); // 더 이상 "올만한" 작업이 아님. 이 작업은 무조건 매칭된다고 하자.
            to.push(a[i]); // 뒤에 매칭된 작업은 저장해 둠.
        }
        else if(!to.empty() && to.top().r<a[i].r){ // 만약 "뒤에 오는 작업" 이랑 바꿔치기해서 들어갈 수 있으면?
            // 시작점은 무조건 더 뒤에 있고, if문에 의해 끝점도 더 뒤에 있음.
            // 그러면 앞에 있는 작업을 빼서 "앞에 올만한 작업"에 두는 게 더 그리디함.
            worker[a[i].idx]=worker[to.top().idx];
            worker[to.top().idx]=0;
            from.push(to.top());
            to.pop();
            to.push(a[i]);
        }
        else from.push(a[i]);
    }
    for(i=0;i<n;i++) if(worker[i]==0) worker[i]=++match_cnt;
    for(i=0;i<n;i++){
        if(worker[i]<=m) cout<<worker[i]<<" ";
        else cout<<"0 ";
    }
    cout<<endl;
    // 이거 풀리면 시발 내가 신임
    // by gs22059
}

详细

Test #1:

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

input:

7 5
9 10
7 9
3 4
9 10
2 6
8 9
5 8

output:

3 4 2 1 1 2 3 

result:

ok answer = 7

Test #2:

score: 0
Accepted
time: 0ms
memory: 3572kb

input:

2 2
1 2
3 4

output:

1 1 

result:

ok answer = 2

Test #3:

score: 0
Accepted
time: 2ms
memory: 3624kb

input:

2 1
1 2
2 3

output:

1 0 

result:

ok answer = 1

Test #4:

score: 0
Accepted
time: 2ms
memory: 3544kb

input:

1 1
4 26

output:

1 

result:

ok answer = 1

Test #5:

score: -100
Wrong Answer
time: 2ms
memory: 3636kb

input:

500 258
1 3
3 5
2 4
3 5
4 5
4 5
1 4
1 2
3 5
2 5
2 5
4 5
4 5
4 5
2 3
1 4
1 4
1 4
4 5
4 5
2 3
4 5
3 5
3 5
1 5
1 4
2 5
1 5
3 5
3 4
4 5
2 3
3 5
3 5
4 5
2 3
1 5
1 5
2 3
2 3
3 4
3 5
3 4
1 3
1 2
1 5
4 5
2 3
2 4
1 3
4 5
4 5
4 5
1 3
3 5
4 5
3 5
1 5
1 2
1 2
3 5
3 5
4 5
3 4
3 5
2 3
2 5
2 4
2 5
3 5
2 3
1 5
4 5
...

output:

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 2 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 10...

result:

wrong answer participant answer = 260, judge answer = 376