CF 556D Case of Fugitive 根据岛屿选择桥(贪心)

题目556D 'Case of Fugitive' 要求用贪心策略连接线性排列的岛屿,根据岛屿间的最大和最小距离排序并选择合适的桥梁。通过判断桥的长度是否满足相邻岛屿的限制,输出可行的连接方案。如果无法形成连续的路径,则输出no。
摘要由CSDN通过智能技术生成

http://codeforces.com/contest/556/problem/D


题意:给你n个岛屿 m个桥,岛屿在一条线上

            给岛屿的左坐标与又坐标(L,R).从左到右按顺序给每个岛的L,R

           再给你每个桥的长度,每个桥只能用一次

           让你用桥把岛屿连接起来,能连则输出yes,并且输出每两个岛屿之间的桥的编号

            连接的要求是,每个桥要能连接两个相邻岛屿,又不能越出两个岛屿的最大距离,即x>=L[i+1]-R[i]   &&  x<=R[i+1]-L[i]     

思路:贪心,存下两两相邻岛屿之间的最大距离max,最小距离min,进行排序,先是max从小到大,max相同则min从小到大

           在所有的桥里面找,先满足最小max的对应的min,如果找不到或者找到的桥比max打,则肯定不行,否则一直往后找


#include<set>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<iostream>
#define S second
#define F first
using namespace std;
const int MAX = 200005;
typedef long long LL;
LL xx;
set< pa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值