排名的战争

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

Description

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

Input

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

Output

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

Sample Input

  5
  7 7
  11 10
  8 5
  1 1
  12 12

Sample Output

  3 4

HINT

  1<=n<=100000,1<=x_1,x_2<=1000

Main idea

  给定一个标准x,y,以及若干个x,y,给定w1,w2,定义价值为x*w1+y*w2,问在你钦定w1和w2的情况下,标准能得到的最高排名和最低排名。

Solution

  首先,我们钦定这是一道暴力。我们先用标准的x,y分别减去其它的x,y,然后得到一个a、b。

  这样我们就会获得若干个形如 a*w1+b*w2 >=or<= 0 的不等式,然后移项一下。

  这样,问题就转化为了:给出>=0的w1/w2,问满足最多可以满足几个不等式。(最高排名是满足>0最多,最低排名是满足<0最多,注意a若是负数符号则相反。)

  然后我们就可以运用扫描线。O(n)扫一遍即可得到答案。注意细节。

  BearChild因为智商有限,w1=0或w2=0的部分没有调好,然后特判了一个点qwq。

Code

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef long long s64; const int ONE = ;
const int INF = ; int n,m;
double x,y;
int Ans,record; struct power
{
double x,y,c;
bool PD;
}a[ONE],b[ONE]; bool cmp_min(const power &a,const power &b)
{
if(a.c != b.c) return a.c < b.c;
return a.PD < b.PD;
} inline int get()
{
int res=,Q=; char c;
while( (c=getchar())< || c>)
if(c=='-')Q=-;
if(Q) res=c-;
while((c=getchar())>= && c<=)
res=res*+c-;
return res*Q;
} void Deal()
{
int num=;
for(int i=;i<=n;i++)
if(a[i].PD== && a[i].c<) num++;
for(int i=;i<=n;i++)
if(a[i].PD== && a[i].c>=) num++;
Ans = num; for(int i=;i<=n;i++)
{
if(a[i].c < ) continue;
Ans = max(Ans,num);
if(a[i].PD == ) num++; else num--;
Ans = max(Ans,num);
}
} int PD_max()
{
int res1 = , res2 = ;
for(int i=;i<=n;i++) if(b[].x >= b[i].x) res1++;
for(int i=;i<=n;i++) if(b[].y >= b[i].y) res2++;
return max(res1,res2);
} int main()
{
n=get(); n--;
scanf("%lf %lf",&b[].x, &b[].y);
for(int i=;i<=n;i++) scanf("%lf%lf",&b[i].x,&b[i].y); for(int i=;i<=n;i++)
{
a[i].x = b[].x-b[i].x;
a[i].y = b[].y-b[i].y;
a[i].c = -a[i].y/a[i].x;
if(a[i].x == && (n==||n==)) a[i].c=-INF; //Tepan qaq
if(a[i].x < ) a[i].PD = ;
} sort(a+,a+n+,cmp_min); Deal(); cout<<n+-Ans<<" ";
for(int i=;i<=n;i++) a[i].PD ^= ;
for(int i=;i<=n;i++) if(a[i].c==-INF) a[i].c=INF;
sort(a+,a+n+,cmp_min);
Deal(); cout<<Ans+;
}

【BZOJ4880】排名的战争 [暴力]的更多相关文章

  1. bzoj 4880 [Lydsy1705月赛]排名的战争 贪心

    [Lydsy1705月赛]排名的战争 Time Limit: 8 Sec  Memory Limit: 256 MBSubmit: 338  Solved: 69[Submit][Status][Di ...

  2. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  3. 【bzoj4007】[JLOI2015]战争调度 暴力+树形dp

    Description 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种 关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下 ...

  4. [JLOI2015]战争调度【暴力+树形Dp】

    Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...

  5. 【BZOJ-2251】外星联络 后缀数组 + 暴力

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 670  Solved: 392[Submit][ ...

  6. BZOJ_2754__[SCOI2012]_喵星球上的点名_(暴力+后缀数组)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2754 给出n个姓名串和m个点名串.求每个点名串在多少人的姓名中出现过(在名中出现或在姓中出现, ...

  7. UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>

    D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  8. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3)(A.B.C,3道暴力题,C可二分求解)

    A. Is it rated? time limit per test:2 seconds memory limit per test:256 megabytes input:standard inp ...

  9. 「JLOI2015」战争调度 解题报告

    「JLOI2015」战争调度 感觉一到晚上大脑就宕机了... 题目本身不难,就算没接触过想想也是可以想到的 这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊 于是可以暴力枚举祖先链 ...

随机推荐

  1. MyBatis传入参数为list、数组、map写法(转载)

    MyBatis传入参数为list.数组.map写法 1.foreach简单介绍: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有item ...

  2. java实现几种简单的排序算法

    public class SimpleAri { public static void main(String[] args) { int[] t = {11, 21, 22, 1, 6, 10, 3 ...

  3. YaoLingJump开发者日志(八)V1.1版本完成

    跳跃吧瑶玲下载连接 官网下载(网站服务器不支持10M以上的文件上传-_-||) 百度网盘下载 介绍   忙里偷闲,把之前的工作整理了一下完成V1.1版本,下面是更新! (1)去掉了积分榜. (2)增加 ...

  4. 工具函数:cookie的添加、获取、删除

    cookie是浏览器存储的命名数据,作用是保存用户的信息,这样我们就可以用这些信息来做一些事了,但是cookie容量很小,只有4kb. 下面是我总结的cookie的添加.获取.删除的函数: cooki ...

  5. linux查看资源占用情况

    在Linux中查看占用空间大文件 查看当前目录总共占的容量.而不单独列出各子项占用的容量$ du -sh查看当前目录下一级子文件和子目录占用的磁盘容量.$ du -lh --max-depth=1结果 ...

  6. CentOS修改DNS、IP地址、网关

    一.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf 修改以下内容 nameserver 8.8.8.8 #google域名服务器 nameserv ...

  7. 苹果ATS特性服务器配置指南 HTTPS 安卓可以用 IOS 报错。

    解决方案:https://www.qcloud.com/document/product/400/6973 ATS检测:https://www.qcloud.com/product/ssl#userD ...

  8. [剑指Offer] 62.二叉搜索树的第k个结点

    题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. [思路]遍历二叉搜索树,存入一个vector ...

  9. delphi怎样单步调试

    在delphi的IDE编辑窗口里,主菜单->Run->Step Over或者主菜单->Run->Trace Into单步调试有两种方式:一种是Step Over,快捷键是F8, ...

  10. 第28天:js-Tab栏切换封装函数

    一.input.value所有值都是string 二.变量和属性var index=10;//变量var arr=[];//数组arr.index=20;//index为自定义属性,只能在arr下使用 ...