zoukankan      html  css  js  c++  java
  • POJ2376_Cleaning Shifts_C++

      题目:http://poj.org/problem?id=2376

      英文题强行看不懂,只看的懂输入输出,输入n,m,下接n行每行一个区间两个数左端点 l,有端点 r

      给出n个闭区间,求选择最少的区间能够完全覆盖[1,m]

      经典的区间覆盖问题,按左端点升序排序

      首先当前卡点为1,选择小于等于当前卡点的,尽量往右边扩

      直到大于当前卡点,再将卡点设为右边能扩展到的最大值

      统计答案,注意闭区间和左端点最小区大于 1 的情况

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<algorithm>
     7 #include<ctime>
     8 #include<queue>
     9 #include<stack>
    10 #define fre(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
    11 typedef long long LL;
    12 typedef double db;
    13 using namespace std;
    14 
    15 const int oo=2147483647,TL=980,N=25001;
    16 struct line
    17 {
    18     int l,r;
    19 }
    20     a[N];
    21 inline bool cmp(line x,line y)
    22 {
    23     return x.l<y.l;
    24 }
    25 int main()
    26 {
    27     int n,m,i,k,x,ans=0,j;
    28     scanf("%d%d",&n,&m);
    29     for (i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r);
    30     sort(a+1,a+1+n,cmp);
    31     for (k=x=i=j=1;i<=n;j=i)
    32     {
    33         while (a[i].l<=k&&i<=n&&x<m) x=max(x,a[i++].r);
    34         ans++;
    35         if ((k=x+1)>m||i==j) break;
    36     }
    37     printf("%d
    ",k<=m?-1:ans);
    38     return 0;
    39 }

      本来以为水贪心可以一边A,结果交了七八遍全WA

      就到网上去下标程拍,修改了2次之后把标程给拍WA了,自己A掉了(233333333333)

      网上的题解也是错的一大片啊~欢迎 Hack

    版权所有,转载请联系作者,违者必究

    联系方式:http://www.cnblogs.com/hadilo/p/5932395.html

  • 相关阅读:
    如何实现虚拟机(VirtualBox)中的Ubuntu与Windows XP间的数据共享
    linux中安装sqlmap
    LookupError: unknown encoding: cp65001解决办法
    共勉
    Linux中安装Nginx
    touch: cannot touch `/home/tomcat7/logs/catalina.out': Permission denied
    程序猿的十一条浮躁表现
    MySQL中varchar类型排序
    Gson和FastJson
    jquery-messager-消息提示
  • 原文地址:https://www.cnblogs.com/hadilo/p/5970981.html
Copyright © 2011-2022 走看看