做题记录2021.12.9

> 咕咕咕!咕了很久的博客终于更新了!

CF720A Closing ceremony

题目大意

> N×M个座位有N×M个人,一开始有 k人在(0,0)点上,l个人在(0,m+1)点上,问是否存在一种方案,使得每个人分配点与起始点的曼哈顿距离小于体力值,且每个人都有位置坐。

思路

贪心,考虑把两个起始点的人尽量往两个角塞

先把第一波人按照体力值从小到大排序

> 为什么不是从大到小排呢?如果体力值大的人把角落塞满了,体力值小的人又走不远,就没地方去了

然后先把位置先分配前 K K K 人(当然也可以先分配给后 L L L 人)。为了给后 L L L 人留够空间,分配时离 ( 0 , m + 1 ) (0, m+1) (0,m+1) 点越远越好,若路程相同则选择离起点越远越好。

再分配后 L L L ,离起点越远越好。

若可行区间内节点都已选择,输出“NO”,否则输出“YES”。

(PS:这道题的算法标签为什么是排序、队列???)

Code(请勿Ctrl+C/V)

// Problem: CF720A Closing ceremony
// URL: https://www.luogu.com.cn/problem/CF720A
// Memory Limit: 250 MB
// Time Limit: 2000 ms
// Author: arlenWKX

# include <bits/stdc++.h>

using namespace std;

const int NM = 10005;

int n, m, k, l, a [ NM ], b [ NM ];
bool used [ NM ] [ NM ];

bool __CF720A__ ( );

int main ( )
{
   
	
	scanf ( "%d%d", & n, & m );
	
	scanf ( "%d", & k );
	for ( int i = 1; i <= k; i ++ ) scanf ( "%d", & a [ i ] )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值