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

BestCoder20 1002.lines (hdu 5124) 解题报告

时间:2014-12-01 22:21:31      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   sp   for   on   

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

题目意思:给出 n 条线段,每条线段用两个整数描述,对于第 i 条线段:xi,yi 表示该条线段的左端点和右端点。设 A 表示最多线段覆盖的点(当然这个 A 可以有多个啦,但这个无关紧要)。现在需要求的是 A 被多少条线段覆盖。

      我是不会做啦.......一开始还看不懂题目= =

      以下是按照题解做的,

bubuko.com,布布扣

     

  题解中的最大区间和,实际上就是求最大连续子序列的和。

      

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 #define x first
 9 #define y second
10 
11 const int N = 2e5 + 5;
12 pair<int, int> p[N];
13 
14 int main()
15 {
16     #ifndef ONLINE_JUDGE
17         freopen("in.txt", "r", stdin);
18     #endif // ONLINE_JUDGE
19     int t, n;
20     while (scanf("%d", &t) != EOF)
21     {
22         while (t--)
23         {
24             scanf("%d", &n);
25             int a, b, cnt = 0;
26             for (int i = 0; i < n; i++)
27             {
28                 scanf("%d%d", &a, &b);
29                 p[cnt++] = make_pair(a, 1);
30                 p[cnt++] = make_pair(b+1, -1);
31             }
32             sort(p, p+cnt);
33             int ans = 0, sum = 0;
34             for (int i = 0; i < cnt; i++)
35             {
36                 sum += p[i].y;
37                 if (sum > ans)
38                     ans = sum;
39                 if (sum < 0)
40                     sum = 0;
41             }
42             printf("%d\n", ans);
43         }
44     }
45     return 0;
46 }

 

   

BestCoder20 1002.lines (hdu 5124) 解题报告

标签:style   blog   http   io   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/windysai/p/4136034.html

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