洛谷 P1056 排座椅

洛谷 P1056 排座椅

本题是一道模拟题。
很容易想到要一条走廊要尽量分开越多想讲话的人越划算
于是我们先处理处每条走廊有几个人要和下一条走廊的人讲话
然后丢进优先队列里按照讲话的人数排序
最后按照序号先后顺序桶排一波
然后搜一遍输出
附图:(没用的点可以不看,只看绿的和红的)(懒得改图了)
()

代码:

#include<bits/stdc++.h>
using namespace std;
int m,n,k,l,d;
int x,y,p,q;
int fi[1010],fj[1010],ansi[1010],ansj[1010];
priority_queue <pair<int,int> > qi;
priority_queue <pair<int,int> > qj;
int main()
{
	cin>>m>>n>>k>>l>>d;
	for (int i=1;i<=d;i++){
		cin>>x>>y>>p>>q;
		if (x==p){
			if (y+1==q) fj[y]++;
			if (y==q+1) fj[q]++;
		}
		if (y==q){
			if (x+1==p) fi[x]++;
			if (x==p+1) fi[p]++;
		}
	}
	for (int i=1;i<=m;i++) qi.push(make_pair(fi[i],i));
	for (int j=1;j<=n;j++) qj.push(make_pair(fj[j],j));
	for (int i=1;i<=k;i++) ansi[qi.top().second]=1,qi.pop();
	for (int j=1;j<=l;j++) ansj[qj.top().second]=1,qj.pop();
	for (int i=1;i<=m;i++) if (ansi[i]==1) cout<<i<<" ";
	cout<<endl; 
	for (int j=1;j<=n;j++) if (ansj[j]==1) cout<<j<<" ";
	cout<<endl; 
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值