P1007排座椅

思路:每当出现存在同一行有会交头接耳的同学我们就把他们用其中列数较小的一个截下所能阻止的学生对数++,在线处理(按照所有通道所能阻止的人数进行降序排序)完之后用一种贪心策略即选取前k和前l个通道可以满足决策最优化,即最后行列各需要四次快排(2333还好有sort黑科技)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct way
{
	int id,student;
}hang[2002],lie[2002];
int comp1(way a,way b)
{
	return a.student>b.student;
}
int comp2(way a,way b)
{
	return a.id<b.id;
}
int main ()
{
	int m,n,k,l,d;
	cin>>m>>n>>k>>l>>d;
	int xi,yi,pi,qi;
	for (int i=1;i<=m;i++)
		hang[i].id=i,hang[i].student=0;
	for (int i=1;i<=n;i++)
	    lie[i].id=i,lie[i].student=0;
	for (int i=1;i<=d;i++)
    {
    	cin>>xi>>yi>>pi>>qi;
    	if (xi==pi) 
			lie[min(yi,qi)].student++;  	
		else  
			hang[min(xi,pi)].student++;
    }
    sort(hang+1,hang+1+m,comp1);
    sort(lie+1,lie+1+n,comp1);
    sort(hang+1,hang+k+1,comp2);
    sort(lie+1,lie+l+1,comp2);
    for (int i=1;i<=k;i++)
    	cout<<hang[i].id<<" ";
   	cout<<endl;
    for (int i=1;i<=l;i++)
    	cout<<lie[i].id<<" ";
    
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值