zoukankan      html  css  js  c++  java
  • BZOJ 1071 [SCOI2007]组队

    1071: [SCOI2007]组队

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 1330  Solved: 417
    [Submit][Status][Discuss]

    Description

    NBA每年都有球员选秀环节。通常用速度和身高两项数据来衡量一个篮球运动员的基本素质。假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有队员都应该满足: A * ( height – minH ) + B * ( speed – minV ) <= C 其中A和B,C为给定的经验值。这个式子很容易理解,如果一个球队的球员速度和身高差距太大,会造成配合的不协调。 请问作为球队管理层的你,在N名选秀球员中,最多能有多少名符合条件的候选球员。

    Input

    第一行四个数N、A、B、C 下接N行每行两个数描述一个球员的height和speed

    Output

    最多候选球员数目。

    Sample Input

    4 1 2 10
    5 1
    3 2
    2 3
    2 1

    Sample Output

    4

    HINT

    数据范围: N <= 5000 ,height和speed不大于10000。A、B、C在长整型以内。

    Source

    题解:这是一个乱搞的题,泥萌去围观大爷的题解吧= =

    反正复杂度对了就行。。。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<stack>
     6 #include<queue>
     7 #include<cstring>
     8 #define PAU putchar(' ')
     9 #define ENT putchar('
    ')
    10 #define MSE(a,b) memset(a,b,sizeof(a))
    11 #define REN(x) for(ted*e=fch[x];e;e=e->nxt)
    12 #define TIL(x) for(int i=1;i<=x;i++)
    13 #define ALL(x) for(int j=1;j<=x;j++)
    14 using namespace std;
    15 const int maxn=5000+10;
    16 double mx,mi;int l,r,cnt,ans,n,A,B,C;
    17 struct data{int h,v,s;void update(){s=A*h+B*v;}}arr[2][maxn];
    18 inline bool cmph(const data&a,const data&b){return a.h<b.h;}
    19 inline bool cmps(const data&a,const data&b){return a.s<b.s;}
    20 inline bool check(int id,int d){return arr[id][d].v<=mx&&arr[id][d].v>=mi;}
    21 inline int read(){
    22     int x=0;bool sig=true;char ch=getchar();
    23     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=false;
    24     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';return sig?x:-x;
    25 }
    26 inline void write(int x){
    27     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    28     int len=0;static int buf[20];while(x)buf[len++]=x%10,x/=10;
    29     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    30 }
    31 int main(){
    32     n=read();A=read();B=read();C=read();
    33     TIL(n){arr[0][i].h=read();arr[0][i].v=read();arr[0][i].update(),arr[1][i]=arr[0][i];}
    34     sort(arr[0]+1,arr[0]+n+1,cmph);sort(arr[1]+1,arr[1]+n+1,cmps);
    35     TIL(n){
    36         mi=arr[0][i].v,mx=mi+(double)C/(double)B;l=r=cnt=0;
    37         ALL(n){
    38             while(r<n&&arr[1][r+1].s-A*arr[0][j].h-B*arr[0][i].v<=C)cnt+=check(1,++r);
    39             while(l<n&&arr[0][l+1].h<arr[0][j].h)cnt-=check(0,++l);ans=max(ans,cnt);
    40         }
    41     }write(ans);
    42     return 0;
    43 }
  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/chxer/p/4744514.html
Copyright © 2011-2022 走看看