zoukankan      html  css  js  c++  java
  • hdu 6119 小小粉丝度度熊(尺取)

    小小粉丝度度熊

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

    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 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<string.h>
     7 #include<set>
     8 #include<vector>
     9 #include<queue>
    10 #include<stack>
    11 #include<map>
    12 #include<cmath>
    13 typedef long long ll;
    14 typedef unsigned long long LL;
    15 using namespace std;
    16 const double PI=acos(-1.0);
    17 const double eps=0.0000000001;
    18 const int INF=0x3f3f3f3f;
    19 const int N=500000+100;
    20 struct node{
    21     ll x,y;
    22     ll len;
    23 }a[N],b[N];
    24 bool cmp(node aa,node bb){
    25     if(aa.x==bb.x)return aa.y<bb.y;
    26     else{
    27         return aa.x<bb.x;
    28     }
    29 
    30 }
    31 int main(){
    32     int n,m;
    33     while(scanf("%d%d",&n,&m)!=EOF){
    34         for(int i=1;i<=n;i++){
    35             scanf("%I64d%I64d",&a[i].x,&a[i].y);
    36         }
    37         memset(b,0,sizeof(b));
    38         sort(a+1,a+1+n,cmp);
    39 
    40         int t=0;
    41         for(int i=1;i<=n;){
    42             int j=i+1;
    43             b[t].x=a[i].x;
    44             b[t].y=a[i].y;
    45             while(b[t].y>=a[j].x&&j<=n){
    46                 if(b[t].y>=a[j].y){
    47                     j++;
    48                     continue;
    49                 }
    50                 else{
    51                     b[t].y=a[j].y;
    52                 }
    53                 j++;
    54             }
    55             i=j;
    56             t++;
    57         }
    58        // cout<<t<<endl;
    59         /*for(int i=0;i<t;i++){
    60             cout<<b[i].x<<" "<<b[i].y<<endl;
    61         }*/
    62         sort(b,b+t,cmp);
    63         int l=0;
    64         int r=0;
    65         ll tt=m;
    66         ll ans=0;
    67         while(r<t&&l<t){
    68             while(b[r+1].x-b[r].y-1<=tt){
    69                 if(r+1>=t)break;
    70                 tt=tt-(b[r+1].x-b[r].y-1);
    71                 r++;
    72             }
    73             ans=max(ans,b[r].y-b[l].x+1+tt);
    74             if((b[l+1].x-b[l].y-1+tt)<=m&&l+1!=t){
    75                 tt=tt+(b[l+1].x-b[l].y-1);
    76             }
    77             l++;
    78             if(l>r)r++;
    79         }
    80         cout<<ans<<endl;
    81     }
    82 }
  • 相关阅读:
    默哀STAND SILENTLY!
    用虚拟机优化Windows(update:2008.4.24)
    UE的心情指数?
    God of War III 的发售日期?
    2009/8/15应该是一个愉快的夜晚.为林肯公园中国10月演唱会做好准备
    北京2008奥运会完美谢幕!
    《The Pursuit of Happyness / 当幸福来敲门》(2006)
    2007林肯公园上海演唱会观后感(实况像片/MP3) update:2008.1.31
    2008早上好
    Active Object C++智能指针实现
  • 原文地址:https://www.cnblogs.com/Aa1039510121/p/7361458.html
Copyright © 2011-2022 走看看