小小粉丝度度熊

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1299    Accepted Submission(s):
419

Problem Description
度度熊喜欢着喵哈哈村的大明星——星星小姐。

为什么度度熊会喜欢星星小姐呢?

首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听。

但这都不是最重要的,最重要的是,星星小姐拍的一手好代码!

于是度度熊关注了星星小姐的贴吧。

一开始度度熊决定每天都在星星小姐的贴吧里面签到。

但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到。

不过度度熊并不是非常悲伤,因为他有m张补签卡,每一张补签卡可以使得某一忘签到的天,变成签到的状态。

那么问题来了,在使用最多m张补签卡的情况下,度度熊最多连续签到多少天呢?

 
Input
本题包含若干组测试数据。

第一行两个整数n,m,表示有n个区间,这n个区间内的天数,度度熊都签到了;m表示m张补签卡。

接下来n行,每行两个整数(l[i],r[i]),表示度度熊从第l[i]天到第r[i]天,都进行了签到操作。

数据范围:

1<=n<=100000

0<=m<=1000000000
0<=l[i]<=r[i]<=1000000000

注意,区间可能存在交叉的情况。

 
Output
输出度度熊最多连续签到多少天。
 
Sample Input
2 1
1 1
3 3
1 2
1 1
 
Sample Output
3
3

Hint

样例一:度度熊补签第2天,然后第1天、第二天和第三天都进行了签到操作。
样例二:度度熊补签第2天和第3天。

 
Source

思路:尺取法,做法:例如下图所示,先把题设给出的那些区间预处理,合并有重叠的那些区间,处理后的区间互不重叠,区间编号可以从1开始计数,s为尺取法中取中的那些区间中最左边的那个区间的编号,t为最右边的区间的编号。若s的左端点直到t的右端点之间的空隙的和小于等于补签卡的个数,此时更新所求区间的最大长度,并且补签卡没用完,说明t点也许还可以往右延伸,以获得更大的区间长度,直到t尝试走完所有区间;若s,t之间的空隙的和大于补签卡个数,说明t走得太过远了,换句话说,若是以s为签到的第一个区间,用完m张签到卡,最多也只能走到(t-1)区间的后面一点点,不会到达t区间的左端点,此时也要更新区间的最大长度,并且让s往右挪一区间。

AC代码:

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
typedef long long ll;
const int N_MAX = +; struct Interval {
int Left, Right;
Interval(int Left=,int Right=):Left(Left),Right(Right) {}
bool operator <(const Interval&b) const{
if (this->Left != b.Left)return this->Left < b.Left;
else return this->Right < b.Right;
}
}interval[N_MAX];
vector<Interval>vec;
int n, m;
ll c[N_MAX];//c[j]记录到区间j为止(包括j)的所有区间和,不包含中间的空隙
int main() {
while (scanf("%d%d", &n, &m) != EOF) {
vec.clear();
memset(c, , sizeof(c));
for (int i = ; i < n; i++) {
scanf("%d%d", &interval[i].Left, &interval[i].Right);
}
sort(interval, interval + n);
vec.push_back(interval[]);
for (int i = ; i < n; i++) {//合并所有可以合并的区间
Interval P = vec[vec.size() - ];
if (interval[i].Left <= P.Right + ) {//两个区间可以合并
int Left, Right;
Right = max(P.Right, interval[i].Right);
vec.pop_back();
Left = P.Left;
vec.push_back(Interval(Left, Right));
}
else {
vec.push_back(interval[i]);
}
}
int N = vec.size();//区间的数量 for (int i = ; i <= N;i++) {//c[i],第i个区间为止所有区间的大小的和
c[i] += c[i-] + vec[i-].Right - vec[i-].Left + ;
} int s = , t = ;
ll res = ;
ll num;
for (;;) {
while (t <= N&&(num=(vec[t-].Right-vec[s-].Left+-(c[t]-c[s-])) )<= m) {
ll diff = vec[t - ].Right - vec[s - ].Left + ;
res =max(res,diff);
t++;
}
if (num <= m) { break; }
ll remain = c[t-]-c[s-]+m ;
res = max(res, remain);
s++;
}
res = max(res, c[N ] - c[s - ] + m);
printf("%lld\n", res);
}
return ;
}

hdu 6119 小小粉丝度度熊的更多相关文章

  1. HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. hdu 6119 小小粉丝度度熊(尺取)

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  3. HDU 6119 小小粉丝度度熊 (区间去重)【尺取】

    <题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...

  4. HDU 6119 小小粉丝度度熊 双指针

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 题意:中文题面. 解法:先处理可能交叉的区间,然后容易发现满足双指针的特性. //HDU 611 ...

  5. HDU 6119 小小粉丝度度熊(Two pointers)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6119 [题目大意] 给出一些签到区间和一些补签卡,问可以创造的最长连续签到区间 [题解] 如果我们 ...

  6. 【二分+尺取】HDU 6119 小小粉丝度度熊

    http://acm.hdu.edu.cn/showproblem.php?pid=6119 [思路] 首先通过处理交叉的可以处理成不交叉的 然后二分查找答案 如何判断一个长度是否可行? 双指针O(n ...

  7. HDU 6119 2017百度之星初赛B 小小粉丝度度熊 (二分)

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. 2017"百度之星"程序设计大赛 - 初赛(B)小小粉丝度度熊

    Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要 ...

  9. 小小粉丝度度熊 二分答案 + two pointer

    http://acm.hdu.edu.cn/showproblem.php?pid=6119 发现自己的two pointer能力超弱. 这题是合并时间后,二分答案. 可以知道对于每个时间区间,合法的 ...

随机推荐

  1. python 函数内使用全局变量

    x = def change_global(): global x x = x + change_global() print(x) result: 2

  2. mini_httpd的安装和配置

    1.下载:http://www.acme.com/software/mini_httpd/mini_httpd-1.19.tar.gz 2.解压:tar zxvf mini_httpd-1.19.ta ...

  3. java基础—泛型

    一.体验泛型 JDK1.5之前的集合类中存在的问题——可以往集合中加入任意类型的对象,例如下面代码: 1 package cn.gacl.generic.summary; 2 3 import jav ...

  4. 01_3_创建一个Servlet

    01_3_创建一个Servlet 1.创建一个Servlet import java.io.IOException; import java.io.PrintWriter; import javax. ...

  5. 使用xcode 8 调试ios10

    这几天更新了ios10,发现真机不能调试,弹出几个错,表示没有证书.用ios9的真机能调试, 真他么坑,总结一下解决方法. 在BuildSetting 的Signing中Code Signing Id ...

  6. 简单的cocos2dx笔试题

    1.参数传递有几种方式?值传递.指针传递.引用传递 2.指针和引用有什么分别:如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗? 1.指针是一个变量,存储一个地址,指向内存的一个存储单元: ...

  7. c#—OpenFileDialog

    OpenFileDialog是什么? OpenFileDialog是一个类,实例化此类可以设置弹出一个文件对话框.比如:我们发邮件时需要上传附件的时候,就会弹出一个让我们选择文件的对话框, 我们可以根 ...

  8. css3中的nth-child和nth-of-type的区别

    实例: 首先创建一个HTML结构 <div class="post"> <p>我是文章的第一段落</p> <p>我是文章的第二段落& ...

  9. 【转】BP神经网络

    学习是神经网络一种最重要也最令人注目的特点.在神经网络的发展进程中,学习算法的研究有着十分重要的地位.目前,人们所提出的神经网络模型都是和学习算 法相应的.所以,有时人们并不去祈求对模型和算法进行严格 ...

  10. 【markdown】 markdown 语法

    介绍几个 markdown 语法学习地址和相关工具 参考链接 coding gitlab markdown offical markdown editor markdown editor2