• 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.     
  • 相关阅读:
    容器云技术:容器化微服务,Istio占C位出道
    如何用istio实现请求超时管理
    技术进阶:Kubernetes高级架构与应用状态部署
    如何基于 K8S 多租能力构建 Serverless Container
    面试题目<转载>
    PHP面试出场率较高的题目<转载>
    命名规范
    字符串大小写转换(三种方法)
    php反转输出字符串(两种方法)
    获取文件名后缀的方法
  • 原文地址:https://www.cnblogs.com/HansBug/p/4421022.html
Copyright © 2020-2023  润新知