[Lydsy1705月赛]排名的战争

Time Limit: 8 Sec  Memory Limit: 256 MB
Submit: 338  Solved: 69
[Submit][Status][Discuss]

Description

小Q是一名出色的质检员,他负责质检一批手机的质量。手机包含两个性能属性:电池寿命x_1与坚硬度x_2。小Q将
为它们评估综合质量分数,具体地说,他将选择两个非负实数w_1,w_2,且$_1,w_2不能同时为0,则一部手机的综
合分数s=w_1*x_1+w_2*x_2。在评定出所有手机的分数后,小Q会把手机按分数从高到低排序,若有多部手机分数相
同,他可以将它们随意排列,因此每部手机的排名都是独一无二的。聪明的你会发现,对于不同的w的选定,手机
的最终排名可能会大不一样。因此各个公司都会暗中贿赂小Q,希望他让自己的排名尽量靠前。现一共有n家公司,
每家公司提供了一部手机用于质检。tangjz知道小Q可以通过调参来控制排名,所以他想知道他的公司的手机排名
最高是多少,最低是多少。
 

Input

第一行包含一个正整数n(1<=n<=100000),即公司的个数。
接下来n行,每行两个正整数x_1,x_2(1<=x_1,x_2<=1000),分别表示每部手机的两个属性。
tangjz所在公司提供的手机总是输入里的第一部手机。

Output

输出一行两个整数,即最高排名与最低排名。

Sample Input

5
7 7
11 10
8 5
1 1
12 12

Sample Output

3 4

HINT

 

Source

本OJ付费获得

只和w1,w2比值有关,那么就可以固定w2,然后不断调大w1就可以了

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<map>
#include<bitset>
#include<stack>
#include<vector>
#include<set>
using namespace std;
#define MAXN 100010
#define MAXM 1010
#define INF 1000000000
#define MOD 1000000007
#define ll long long
#define eps 1e-8
struct data{
double v;
int c;
friend bool operator <(data x,data y){
return x.v<y.v;
}
};
int n;
int x[MAXN],y[MAXN];
int low=,high=INF;
data t[MAXN];
int tot;
int main(){
int i;
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
}
int tlowx=,thighx=,tlowy=,thighy=;
for(i=;i<=n;i++){
if(x[i]>x[]){
thighx++;
}
if(x[i]>=x[]){
tlowx++;
}
if(y[i]>y[]){
thighy++;
}
if(y[i]>=y[]){
tlowy++;
}
}
low=max(low,max(tlowx,tlowy));
high=min(high,min(thighx,thighy));
int tlow=,thigh=;
for(i=;i<=n;i++){
if(y[i]==y[]){
if(x[i]>=x[]){
tlow++;
}
if(x[i]>x[]){
thigh++;
}
continue ;
}
if(y[i]<y[]){
t[++tot].v=.*(x[]-x[i])/(y[i]-y[]);
t[tot].c=-;
tlow++;
thigh++;
}
if(y[i]>y[]){
t[++tot].v=.*(x[]-x[i])/(y[i]-y[]);
t[tot].c=;
}
if(t[tot].v<=){
tlow+=t[tot].c;
thigh+=t[tot].c;
tot--;
}
}
if(tot){
sort(t+,t+tot+);
for(i=;i<=tot;){
int wzh=i;
int tc0=,tc1=;
while(wzh<=tot&&fabs(t[wzh].v-t[i].v)<eps){
if(t[wzh].c==){
tc1++;
}else{
tc0++;
}
wzh++;
}
low=max(low,tlow+tc1);
high=min(high,thigh-tc0);
tlow+=tc1-tc0;
thigh+=tc1-tc0;
i=wzh;
}
}
printf("%d %d\n",high,low);
}

bzoj 4880 [Lydsy1705月赛]排名的战争 贪心的更多相关文章

  1. bzoj 4881 [Lydsy1705月赛]线段游戏

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4881 1.当一块相互交织的线段中有3个或以上两两相交的那种线段时,无解. 这就是最长下降子序 ...

  2. bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4883 把各行和各列看成n+m个点. 如果一下能防守行和列,就是最大匹配了.这是每两个左右部点 ...

  3. BZOJ 4881: [Lydsy1705月赛]线段游戏 动态规划 + 线段树

    Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...

  4. BZOJ 4883: [Lydsy1705月赛]棋盘上的守卫 最小生成树 + 建模

    Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置 ...

  5. BZOJ4886: [Lydsy1705月赛]叠塔游戏(环套树森林&贪心)

    4886: [Lydsy1705月赛]叠塔游戏 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 198  Solved: 76[Submit][Stat ...

  6. BZOJ4883: [Lydsy1705月赛]棋盘上的守卫(最小环套树森林&优化定向问题)

    4883: [Lydsy1705月赛]棋盘上的守卫 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 475  Solved: 259[Submit][St ...

  7. BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)

    4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 359  Solved: 205[Submit][Stat ...

  8. FZU 2139——久违的月赛之二——————【贪心】

    久违的月赛之二 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  9. 【BZOJ4880】排名的战争 [暴力]

    排名的战争 Time Limit: 8 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 小Q是一名出色的质检员,他负责质检 ...

随机推荐

  1. stm32+lwip(一):使用STM32CubeMX生成项目

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  2. 004---os & sys

    os模块和sys模块 这两个模块都提供了很多与操作系统之间交互的功能 使用 import os #当前脚本的工作目录,不是脚本目录 print(os.getcwd()) # 获取指定目录下的所有文件和 ...

  3. GIT LFS 使用笔记

    一.背景 由于git上传文件大小受限,所以我们需要使用GIT LFS对大小超过一定上限的大文件进行处理. 二.安装 linux上安装参见 https://askubuntu.com/questions ...

  4. 什么是Session共享?请举出使用场景

    是指在一个浏览器对应多个Web服务时,服务端的Session数据需要共享.例如单点登录.Web服务器集群等场景都需要用到.多子服务. Session共享有多种解决方案,例如Tomcat插件,我最喜欢的 ...

  5. python2.7练习小例子(十)

        10):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?     程序分析:兔子的规律为数列1,1 ...

  6. 20145202马超 实验二《Java面向对象程序设计》实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  7. Service ANR问题

    错误堆栈: ActivityManager: ANR in com.oppo.reader PID: 8071 Reason: executing service com.oppo.reade//co ...

  8. PIC24 通过USB在线升级 -- USB CDC bootloader

    了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek 今 ...

  9. c++实验3类和对象

     实 验 3: part 1:验证 part 2:graph #include <iostream> #include "graph.h" using namespac ...

  10. 在编程的时候,NotePad++ 中闪烁的光标突然有竖着闪烁的编程蓝色下划线闪烁的--小技巧告诉你-费元星

    当在写代码时出现的光标闪烁(横线闪烁) 在键盘上找 Insert ,按这个Insert就可以把横向闪烁光标( _ )修改成竖向闪烁光标样式( | ),横向光标会在你写代码的时候修改前面的代码,把光标移 ...