QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#46750 | #1173. Knowledge Is... | idkwhatimdoing | WA | 2ms | 3636kb | C++ | 2.0kb | 2022-08-31 22:55:06 | 2022-08-31 22:55:09 |
Judging History
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
}
Details
Tip: Click on the bar to expand more detailed information
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