【上海交大oj】水枪灭火(计算区间长度)

1025. 水枪灭火

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=======================================================================实现方法比较多,总体就是先排序1. 只对区间左边界排序,排完序后计算长度时对一个点可能要扫描较多的点(右边界较大);2. 左右边界都进行排序,然后一一对应形成区间,对一个区间只需判断和下一个区间是否重复即可;3.这个思想比较巧妙,把左右边界同时排序,然后遍历,统计剩余的左边界数目,同时记录当前最小的左边界,当遇到最大的右边界时(即剩余左边界为零时)计算区间长度,下一个点记为新的左边界。我用的第三种,在实现时遇到一个小问题导致有一个点没有通过,就是排序的时候,如果有几个相同的数,那么就可能是右边界的数排在了左边,这样就不能保证时刻左边界数量大于右边界了,所以在排序的时候就要考虑相同时把左边界排在左边。下面是代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4
 5 struct onepoint{
 6     long long coord;  //区间边界值
 7     bool dire;          //左边界还是右边界
 8 };
 9 bool compare(onepoint a,onepoint b) {
10     if (a.coord==b.coord && a.dire < b.dire) return 1; //确保左边界排在左边
11     return a.coord<b.coord;
12 }
13 int main(){
14     int N,i,j;
15
16     cin>>N;
17     onepoint interval[2*N];
18     for (i=0;i<N;++i) {
19         cin>>interval[2*i].coord>>interval[2*i+1].coord;
20         interval[2*i].dire = 0;
21         interval[2*i+1].dire = 1;
22     }
23     sort(interval,interval+2*N,compare);
24     long long length = 0;
25     long long left = interval[0].coord;
26     long long num_left = 1;
27     for (i=1;i<2*N;++i) {
28         if (num_left==0) left = interval[i].coord;    //更新最左边界值
29         if (interval[i].dire) num_left--;
30         else num_left++;                           //更新左边界数量
31         if (num_left==0) length+=interval[i].coord - left;     //更新长度
32     }
33     cout<<length;
34     return 0;
35 }


 
时间: 2024-07-30 06:33:51

【上海交大oj】水枪灭火(计算区间长度)的相关文章

【上海交大oj】能量项链(动态规划)

1073. 能量项链 Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记.因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量.如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则聚合后释放的能量为m×r×n

Java 计算中英文长度的若干种方法

在项目开发中经常碰到到输入字符的校验,特别是中英文混合在一起的校验.而为了满足校验的需求,有时需要计算出中英文的长度. 本文将通过几种常用的方法实现长度的计算: <span style="font-size:18px;">import java.io.UnsupportedEncodingException; /** * 中英文校验的处理 * @author a123demi * */ public class EnChValidate { public static vo

计算字符串长度,加车头

计算字符串长度,加车头.切换到IE模式下使用 0

计算字节长度

<!doctype html><html><head><meta charset="utf-8"><meta name="author" /><meta name="copyright" /><title>计算字节长度</title><script> var str = "abc中文"; // 4e00 - 9fa5 a

处理字符串的一些js/jq方法(去除HTML,去除空格,计算真实长度,截取中英文字符)

stringObject.replace(regexp,replacement) regexp 必需.规定了要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象.replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 去除html标签:function del_html_tags(str){    var words = '';    words = str.replace(/<[^>

利用repne scas byte ptr es:[edi]计算字符串长度

edi:存放字符串al:存放字符xrepne scas byte ptr es:[edi] :遍历字符串,每循环一次ecx-1,遇到字符x则停止汇编中一个很经典的计算字符串长度的方法便是利用了这条指令. 00406930 /$ 89FA mov edx,edi 00406932 |. 89C7 mov edi,eax ;edi里为存放的字符串 00406934 |. B9 FFFFFFFF mov ecx,-0x1 ;ecx放入-1 00406939 |. 30C0 xor al,al ;al=

计算字符串长度

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //1.定义字符串对象 NSString *str=[NSString stringWithString:@"zi fu chuan"]; //2.计算字符串长度 NSUInteger len = [str length]; //3.输出字符串长度 NSLog(@"zi fu

Light OJ 1422 Halloween Costumes 区间DP基础题

Halloween Costumes 题目链接: http://lightoj.com/volume_showproblem.php?problem=1422 题意: Gappu想要去参加一些party,他去每个party都要把特定编号的服装穿在外边,他可以穿上或者脱掉服装(脱掉的服装不能再穿一次,但是可以穿一件相同编号新的服装,最近穿的服装会套在之前穿的服装的外边),问Gappu最少需要准备多少套服装. 题解: 设dp[i][j]为区间 i 到 j (设len为区间长度,j=i+len)内最少

HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 59891    Accepted Submission(s): 25331 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营 地,Derek和Tidy的任务