NC16618排座椅

排座椅

https://ac.nowcoder.com/acm/problem/16618

贪心,用了点没必要的差分,最后用sort排序输出就好

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

bool cmp(vector<int> a,vector<int>b){
    return a[0]>b[0];
}
bool cmp1(vector<int> a,vector<int>b){
    return a[1]<b[1];
}

int m,n,k,l,d;
int main(){
    cin>>m>>n>>k>>l>>d;
    vector<vector<int>> row(m+1,vector<int>(2)),col(n+1,vector<int>(2));
    int x1,y1,x2,y2;
    for(int i = 0;i < d;i++) {
        cin>>x1>>y1>>x2>>y2;
        if(x1 == x2){
            if(y1 > y2) swap(y1,y2);
            col[y1][0]++;
            col[y2][0]--;
        }
        else{
            if(x1 > x2) swap(x1,x2);
            row[x1][0]++;
            row[x2][0]--;
        }
    }

    row[0][1] = 0;col[0][1] = 0;
    for(int i = 1;i < max(row.size(),col.size());i++) {
        if( i < row.size()){
            row[i][0] += row[i-1][0];
            row[i][1] = i;
        }
        if( i < col.size()){
            col[i][0] += col[i-1][0];
            col[i][1] = i;
        }
    }

    sort(row.begin(),row.end(),cmp);
    sort(col.begin(),col.end(),cmp);
    sort(row.begin(),row.begin() + k,cmp1);
    sort(col.begin(),col.begin() + l,cmp1);

    for(int i = 0;i<k;i++){
        if(i) cout<<" ";
        cout<<row[i][1];
    }
    cout<<endl;
    for(int i = 0;i<l;i++){
        if(i) cout<<" ";
        cout<<col[i][1];
    }
    cout<<endl;
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务