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 }
  • 相关阅读:
    Windows7共享设置
    13-运算符
    13-数据类型转换
    06-移动web之flex布局
    09-sass
    08-less预处理器
    移动端必须掌握知识点
    11-JS变量
    10-响应式
    07-rem
  • 原文地址:https://www.cnblogs.com/chxer/p/4744514.html
Copyright © 2011-2022 走看看