zoukankan      html  css  js  c++  java
  • 3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者

    3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 71  Solved: 62
    [Submit][Status][Discuss]

    Description

        约翰有N(1≤N≤50000)头牛,约翰的草地可以认为是一条直线.每只牛只喜欢在某个特定的范围内吃草.第i头牛喜欢在区间(Si,Ei)吃草,1≤Si<Ei≤1,000,000,00.
        奶牛们都很自私,他们不喜欢和其他奶牛共享自己喜欢吃草的领域,因此约翰要保证任意
    两头牛都不会共享他们喜欢吃草昀领域.如果奶牛i和奶牛J想要同时吃草,那么要满足:Si>=Ej或者Ei≤Sj.约翰想知道在同一时刻,最多可以有多少头奶牛同时吃草?

    Input

        第1行:一个整数N.
        第2到N+1行:第i+l行有两个整数Si,Ei.

    Output

     
        一个整数,最多可以有多少头牛同时吃草.

    Sample Input

    5
    2 4
    1 12
    4 5
    7 10
    7 8

    Sample Output

    3

    HINT

      第1,3,4共3只奶牛可以同时吃草,第1,3,5也可以.

    Source

    Silver

    题解:贪心水题一道= =。。。很明显对于同样的右界限区间,显然选范围最小的肯定没有错,于是只保留范围小的,然后排序,贪心水过。。。

     1 /**************************************************************
     2     Problem: 3410
     3     User: HansBug
     4     Language: Pascal
     5     Result: Accepted
     6     Time:212 ms
     7     Memory:696 kb
     8 ****************************************************************/
     9  
    10 var
    11    i,j,k,l,m,n,t:longint;
    12    a:array[0..60000,1..2] of longint;
    13 procedure swap(var x,y:longint);
    14           var z:longint;
    15           begin
    16                z:=x;x:=y;y:=z;
    17           end;
    18 procedure sort(l,r:longint);
    19           var i,j,x,y:longint;
    20           begin
    21                i:=l;j:=r;x:=a[(l+r) div 2,2];y:=a[(l+r) div 2,1];
    22                repeat
    23                      while (a[i,2]<x) or ((a[i,2]=x) and (a[i,1]>y)) do inc(i);
    24                      while (a[j,2]>x) or ((a[j,2]=x) and (a[j,1]<y)) do dec(j);
    25                      if i<=j then
    26                         begin
    27                              swap(a[i,1],a[j,1]);
    28                              swap(a[i,2],a[j,2]);
    29                              inc(i);dec(j);
    30                         end;
    31                until i>j;
    32                if i<r then sort(i,r);
    33                if l<j then sort(l,j);
    34           end;
    35 begin
    36      readln(n);
    37      for i:=1 to n do readln(a[i,1],a[i,2]);
    38      sort(1,n);
    39      a[0,1]:=0;a[0,2]:=0;
    40      t:=0;l:=0;
    41      for i:=1 to n do
    42          if a[i,2]<>a[i-1,2] then
    43             if a[i,1]>=t then
    44                begin
    45                     t:=a[i,2];
    46                     inc(l);
    47                end;
    48      writeln(l);
    49      readln;
    50 end.     
  • 相关阅读:
    一则浏览器兼容性解决案例(搜狗)
    使用sass命令行,包含bourbon,neat包的项目
    指针例1
    数学建模四0-1规划
    数学建模3
    数学建模2.生产计划
    复数的实现1.3
    多文件操作1.2.5
    函数及参数类型1.2.4
    指针类型1.2.3
  • 原文地址:https://www.cnblogs.com/HansBug/p/4421022.html
Copyright © 2011-2022 走看看