码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 6119 小小粉丝度度熊 (区间处理+尺取)

时间:2017-08-14 11:34:06      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:代码   处理   can   http   题目   scan   想法   blog   i++   

http://acm.hdu.edu.cn/showproblem.php?pid=6119

 

解题思路:给出的出发时间和结束时间对有重合的部分进行处理,然后用尺取法找出最后的结果。比赛的时候的确想到了用尺取的想法完成题目,但是代码能力不行没有想出来。

 

AC代码:

 1 #include <iostream>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 const int maxn=100005;
 5 struct node
 6 {
 7     int l,r;
 8 }p[maxn];
 9 int sum[maxn];
10 bool cmp(node a,node b)
11 {
12     return a.l<b.l;
13 }
14 int main()
15 {
16     int n,m;
17     while(~scanf("%d%d",&n,&m))
18     {
19         for(int i=0;i<n;i++)
20         scanf("%d%d",&p[i].l,&p[i].r);
21         sort(p,p+n,cmp);
22         int len=0;
23         int nowl=p[0].l,nowr=p[0].r;
24         for(int i=1;i<n;i++)
25         {
26             if(p[i].l<=nowr)
27             nowr=max(nowr,p[i].r);
28             else
29             {
30                 p[len].l=nowl;
31                 p[len++].r=nowr;
32                 nowl=p[i].l;
33                 nowr=p[i].r;
34             }
35         }
36         p[len].l=nowl;
37         p[len++].r=nowr;
38         for(int i=0;i<len-1;i++)
39         sum[i]=max(0,p[i+1].l-p[i].r-1);
40         int l=0,r=0;
41         int now=0,ans=0;
42         while(r<len)
43         {
44             ans=max(ans,p[r].r-p[l].l+1+m-now);
45             now+=sum[r++];
46             while(now>m)
47             now-=sum[l++];
48         }
49         printf("%d\n",ans);
50     }
51     return 0;
52 }

 

hdu 6119 小小粉丝度度熊 (区间处理+尺取)

标签:代码   处理   can   http   题目   scan   想法   blog   i++   

原文地址:http://www.cnblogs.com/wang-ya-wei/p/7356520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!