【BZOJ4880】排名的战争 [暴力]
排名的战争
Time Limit: 8 Sec Memory Limit: 256 MB
[Submit][Status][Discuss]
Description
手机包含两个性能属性:电池寿命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
Output
Sample Input
7 7
11 10
8 5
1 1
12 12
Sample Output
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】排名的战争 [暴力]的更多相关文章
- bzoj 4880 [Lydsy1705月赛]排名的战争 贪心
[Lydsy1705月赛]排名的战争 Time Limit: 8 Sec Memory Limit: 256 MBSubmit: 338 Solved: 69[Submit][Status][Di ...
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp
题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形dp
Description 脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种 关系刚好组成一个 n 层的完全二叉树.公民 i 的下属是 2 * i 和 2 * i +1.最下 ...
- [JLOI2015]战争调度【暴力+树形Dp】
Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...
- 【BZOJ-2251】外星联络 后缀数组 + 暴力
2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 670 Solved: 392[Submit][ ...
- BZOJ_2754__[SCOI2012]_喵星球上的点名_(暴力+后缀数组)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2754 给出n个姓名串和m个点名串.求每个点名串在多少人的姓名中出现过(在名中出现或在姓中出现, ...
- UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>
D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- 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 ...
- 「JLOI2015」战争调度 解题报告
「JLOI2015」战争调度 感觉一到晚上大脑就宕机了... 题目本身不难,就算没接触过想想也是可以想到的 这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊 于是可以暴力枚举祖先链 ...
随机推荐
- TCP系列21—重传—11、TLP
一.介绍 Tail Loss Probe (TLP)是同样是一个发送端算法,主要目的是使用快速重传取代RTO超时重传来处理尾包丢失场景.在一些WEB业务中,如果TCP尾包丢失,如果依靠RTO超时进行重 ...
- JDK源码分析 – LinkedList
LinkedList类的申明 public class LinkedList<E> extends AbstractSequentialList<E> implements L ...
- OSG学习:响应键盘鼠标示例
示例功能:示例里面有两个模型,一个是牛,另一个是飞机.鼠标右键时牛和飞机都隐藏,鼠标左键双击时牛和飞机都显示,按键盘上面的LEFT键,显示牛,按键盘上面的RIGHT键显示飞机.其中显示与隐藏节点使用的 ...
- JavaScript数组自定义属性
我们可以以json键值对的形式自定义属性. 首先定义一个JS数组JSarray. 然后按json键值对的形式进行赋值. 最后在控制台显示结果. 代码如下: var JSarray = new Arra ...
- vi/sed等遵循的搜索正则语法
转自:http://blog.csdn.net/lanxinju/article/details/5731843 一.查找 查找命令 /pattern<Enter> :向下查找patter ...
- AutoResetEvent的基本用法
The following example uses an AutoResetEvent to synchronize the activities of two threads.The first ...
- 【python】Python 之 __new__() 方法与实例化
本文转自:http://www.cnblogs.com/ifantastic/p/3175735.html __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 ...
- overflow:scroll 滚动条不显示
overflow:scroll 滚动条不显示 ::-webkit-scrollbar-thumb 可能因为 自定义的滚动条height比元素可展示内容大
- js 事件阻止传播方法,准确定位事件源
1事件冒泡 在目标元素获得机会处理事件后,事件模型检查目标元素的父元素,看是否为同类型事件建立了处理程序.如果是,则也调用父元素的处理程序.在这之后,再检查其父元素,然后父元素,然后父元素...持续不 ...
- MATLAB中的randi函数
randi Pseudorandom integers from a uniform discrete distribution.来自一个均匀离散分布的伪随机整数 R = randi(IMAX,N) ...