hdu 6119 小小粉丝度度熊
小小粉丝度度熊
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1299 Accepted Submission(s):
419
为什么度度熊会喜欢星星小姐呢?
首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听。
但这都不是最重要的,最重要的是,星星小姐拍的一手好代码!
于是度度熊关注了星星小姐的贴吧。
一开始度度熊决定每天都在星星小姐的贴吧里面签到。
但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到。
不过度度熊并不是非常悲伤,因为他有m张补签卡,每一张补签卡可以使得某一忘签到的天,变成签到的状态。
那么问题来了,在使用最多m张补签卡的情况下,度度熊最多连续签到多少天呢?
第一行两个整数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
注意,区间可能存在交叉的情况。
1 1
3 3
1 2
1 1
3
样例一:度度熊补签第2天,然后第1天、第二天和第三天都进行了签到操作。
样例二:度度熊补签第2天和第3天。
思路:尺取法,做法:例如下图所示,先把题设给出的那些区间预处理,合并有重叠的那些区间,处理后的区间互不重叠,区间编号可以从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 小小粉丝度度熊的更多相关文章
- HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 6119 小小粉丝度度熊(尺取)
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 6119 小小粉丝度度熊 (区间去重)【尺取】
<题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...
- HDU 6119 小小粉丝度度熊 双指针
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 题意:中文题面. 解法:先处理可能交叉的区间,然后容易发现满足双指针的特性. //HDU 611 ...
- HDU 6119 小小粉丝度度熊(Two pointers)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6119 [题目大意] 给出一些签到区间和一些补签卡,问可以创造的最长连续签到区间 [题解] 如果我们 ...
- 【二分+尺取】HDU 6119 小小粉丝度度熊
http://acm.hdu.edu.cn/showproblem.php?pid=6119 [思路] 首先通过处理交叉的可以处理成不交叉的 然后二分查找答案 如何判断一个长度是否可行? 双指针O(n ...
- HDU 6119 2017百度之星初赛B 小小粉丝度度熊 (二分)
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 2017"百度之星"程序设计大赛 - 初赛(B)小小粉丝度度熊
Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要 ...
- 小小粉丝度度熊 二分答案 + two pointer
http://acm.hdu.edu.cn/showproblem.php?pid=6119 发现自己的two pointer能力超弱. 这题是合并时间后,二分答案. 可以知道对于每个时间区间,合法的 ...
随机推荐
- python 搜集参数
def print_params(*params): print(params) print_params('Testing')print_params(1,2,3) #参数前的星号将所有值放置在同一 ...
- Maven搭建Struts2+Spring3+Hibernate4框架
做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...
- 八皇后问题(DFS)
题目描述: 要在国际象棋棋盘中放八个皇后,使任意两个皇后都不能互相吃,皇后能吃同一行.同一列,同一对角线上(两个方向的对角线)的任意棋子.现在给一个整数n(n<=92),输出前n种的摆法. 输入 ...
- Java的WatchService文件夹监听遇到的一些问题
打开word文档时会新增一个~$开头的同名文件,关闭时该文件自动删除 修改excel文件时,会新增一个文件名像E56B4610,CBC15610等这样的文件,同时也会产生tmp格式的文件 PPT文件修 ...
- PHP实现同array_column一样的功能
不用PHP自带的array_column函数实现同样的功能 <?php /** * Created by PhpStorm. * User: 123456 * Date: 2018/9/25 * ...
- 移动端H5前端性能优化指南:
分享地址:https://isux.tencent.com/h5-performance.html
- Python入门学习笔记2:刷题
1) LeetCode 强的面试题和算法题,要求也比较高,很多国内外的码农在上面刷题.难度从easy到hard都有,而且覆盖面极广,需要你的综合实力去答题. 最简单的题比如字符串的处理有的时候也要用到 ...
- selenuim2模拟鼠标键盘操作
有时候有些元素不便点击或者做其他的操作,这个时候可以借助selenium提供的Actions类,它可以模拟鼠标和键盘的一些操作,比如点击鼠标右键,左键,移动鼠标等操作.对于这些操作,使用perform ...
- MFC 中 删除一个非空文件夹
MFC中提供了删除文件夹的一个封装函数 RemoveDirectory(LPCTSTR lpPathName),我们只要把要删除的文件夹的路径传进去就可以删除了,貌似一切如此简单.我象征性的建立一个文 ...
- Spring核心技术(十三)——环境的抽象
本章将描述一下Spring中针对环境的抽象. Environment是一个集成到容器之中的特殊抽象,它针对应用的环境建立了两个关键的概念:profile和properties. profile是命名好 ...