算法之路之征服上海交大的oj-水枪灭火

  1. 水枪灭火
    Description

以此题纪念上海“11•15”高楼火灾遇害者

11月15日下午,上海静安区胶州路728号的一幢28层民宅发生严重火灾。消防部门接警后立刻出动25个消防中队、百余辆消防车投入灭火抢救行动,紧急疏散和救助了附近居民百余人。火灾导致58人遇难。

此时大楼的所有楼层已经全部被烈火包围,每辆消防车的高压水枪可以对连续的若干个楼层进行灭火,把高楼看成竖直的y轴(原点可放在任意位置),若一辆消防车对[10,1000]这段区域灭火,则10到1000这段区域的火就被扑灭了。请求出在所有消防车完成灭火工作后,已经被扑灭的区域的总长度。

高压水枪对于控制火势起着很关键的作用。非常遗憾的是,对于28楼的建筑,上海高压水枪的喷射高度“只能到十楼”。
Input Format

第一行:N (消防车的数目)

以后N行,每行两个数:Ai Bi (表示第i个消防车灭火区域的起始位置和终止位置)

−109≤Ai,Bi≤109

N≤20000

若 Ai=Bi

,此段区域就是一个点,看作没有长度。
Output Format

输出被扑灭区域的总长度。
Sample Input

3
-1 1
5 11
2 9

Sample Output

11

提交此题
此题主要考查的是对区间的理解,就是解决重复区间的问题

#include <iostream>
#include <algorithm>
using namespace std;
long long n,length=0; 
struct node{
    long long left;
    long long right;
    long long flag;
}; 
bool cmp(node a,node b){
    return a.left < b.left;
} 
int main(){
    struct node p[20000]; 
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>p[i].left;
        cin>>p[i].right;
        p[i].flag = 0; 
    } 
    sort(p,p+n,cmp);
    for(long long i=0;i<n;i++){
        long long t = p[i].left;
        int flag = 0;
        if(p[i].flag == 1)
            continue; 
        for(long long j=i+1;j<n;j++){
            if(p[i].right > p[j].left && p[j].flag == 0){
                flag = 1;
                p[j].flag = 1;
                if(p[i].right <= p[j].right){
                    p[i].right = p[j].right;
                } 
            } 
        } 
        length = length - p[i].left + p[i].right;
    }
     cout<<length<<endl;    
    return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值