zoukankan      html  css  js  c++  java
  • HDU 6119 小小粉丝度度熊

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6119

    题目大意:给出N个区间,区间可能存在交叉,在这N个区间内的每个点都标记为1,不在区间内的每个点标记为0。现给出M次机会把为0的点标记为1,问能得到的最长的连续1的长度是多少。

    解题思路:离散化之后枚举每个区间,计算以当前区间为起点的满足条件的区间长度值,最后记录最大值。 由于要的是连续的区间长度,因此M此机会也一定是作用于连续的为0区间上。

    代码:

     1 const int maxn = 2e5 + 5;
     2 struct node{
     3     ll l, r;
     4     bool operator < (const node &t) const{
     5         if(t.l != l) return l < t.l;
     6         return r < t.r;
     7     }
     8 }; 
     9 int cmp(node a, node b){
    10     if(a.l != b.l) return a.l < b.l;
    11     return a.r < b.r;
    12 }
    13 node a[maxn], b[maxn];
    14 ll sumb[maxn];
    15 int n, m;
    16 
    17 void solve(){
    18     sort(a, a + n);
    19     int bcnt = 1;
    20     b[bcnt++] = a[0];
    21     for(int i = 0; i < n; i++) {
    22         if(b[bcnt - 1].r >= a[i].l - 1) b[bcnt - 1].r = max(b[bcnt - 1].r, a[i].r);
    23         else b[bcnt++] = a[i];
    24     }
    25     sumb[0] = 0;
    26     for(int i = 1; i < bcnt; i++)  sumb[i] = sumb[i - 1] + b[i].r - b[i].l + 1;
    27     ll ans = 0;
    28     for(int i = 1; i < bcnt; i++){
    29         int j = i;
    30         while(j < bcnt && b[j].r - b[i].l + 1 - (sumb[j] - sumb[i - 1]) <= m) j++;
    31         ll tmans = b[j - 1].r - b[i].l + 1, smm = sumb[j - 1] - sumb[i - 1];
    32         if(m - tmans + smm > 0) tmans += m - tmans + smm;
    33         ans = max(ans, tmans);
    34     }
    35     printf("%I64d
    ", ans);
    36 }
    37 
    38 int main(){
    39     while(scanf("%d %d", &n, &m) !=EOF){
    40         for(int i = 0; i < n; i++) scanf("%I64d %I64d", &a[i].l, &a[i].r);
    41         solve();
    42     }
    43 }

    题目:

    小小粉丝度度熊

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


    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天。
  • 相关阅读:
    dev中gridcontrol为列添加RepositoryItemImageComboBox内置器
    arcengine查询
    利用反射动态创建对象
    arcengine加载模板时实现比例尺与地图的同步
    ArcEngine HRESULT:0x80040215的解决方法( 转)
    Silverlight中的数据访问
    HyperLink链接到项目中的文件
    Silverlight中的数据绑定4
    自定义控件的构建(3)
    自定义控件的构建(1)
  • 原文地址:https://www.cnblogs.com/bolderic/p/7356490.html
Copyright © 2011-2022 走看看