地址:http://codeforces.com/gym/101174/attachments

题目:pdf,略

思路:

  把每个人的(x1,x2)抽象成点(xi,yi).

  当1号比i号排名高时有==>a(x1-xi)+b(y1-yi)>=0

  把(x1-xi,y1-yi)看着向量,(a,b)看做向量。则和(a,b)夹角在90度内的向量个数就是不如1号点优的个数。

  所以要使1号得到最高排名就是使和(a,b)夹角在90度内(包括90度)的向量个数最大。

  所以要使1号得到最低排名就是使和(a,b)夹角在90度内(不包括90度)的向量个数最小。

  注意特判掉xi==x1 && yi==y1的点,以及(a,b)只能在第一象限内。

  求解最高or低排名的过程:

    把所有向量求个极角,然后极角排序。扫一遍有用的可能的(a,b)向量,中间利用two point的方法维护答案。

 #include <bits/stdc++.h>

 using namespace std;

 #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e5+;
const int mod=1e9+; double angle[K],tmp[K];
int n,m,ansa,ansb=K;
int sgn(double ta,double tb)
{
if(fabs(ta-tb)<eps) return ;
return ta<tb?-:;
}
int sc(void)
{
int l=,r=;
double nt1,nt2;
for(int i=;i<m;i++)
{
int tl=l,tr=r;
nt1=tmp[i]+pi/2.0;
nt2=tmp[i]-pi/2.0; while(r<n- && sgn(angle[r+],nt1)<=) r++;
while(l<=r && sgn(angle[l],nt2)<) l++;
while(tr && sgn(angle[tr],nt1)==) tr--;
while(tr<n- && sgn(angle[tr+],nt1)<) tr++;
while(tl<=tr && sgn(angle[tl],nt2)<=) tl++;
ansa=max(ansa,r-l+);
ansb=min(ansb,tr-tl+);
tr++;
}
}
int main(void)
{
int sx,sy,tn=,same=;
scanf("%d",&n);
scanf("%d%d",&sx,&sy);
for(int i=,x,y;i<=n;i++)
{
scanf("%d%d",&x,&y);
if(x==sx && y==sy) {same++;continue;}
angle[tn]=atan2(sy-y,sx-x);
if(sgn(angle[tn],pi/2.0)>= && sgn(angle[tn],pi)<=)
tmp[m++]=angle[tn]-pi/2.0;
else if(sgn(angle[tn],-pi/2.0)>= && sgn(angle[tn],0.0)<=)
tmp[m++]=angle[tn]+pi/2.0;
tn++;
}
n=tn;
sort(angle+,angle+tn);
sort(tmp,tmp+m);
sc();
printf("%d %d\n",n-ansa,n-ansb+same);
return ;
}

2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) B - Bribing Eve的更多相关文章

  1. Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)

    题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...

  2. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) F dfs序+树状数组

    Performance ReviewEmployee performance reviews are a necessary evil in any company. In a performance ...

  3. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)

    A. Within Arm's Reach 留坑. B. Bribing Eve 枚举经过$1$号点的所有直线,统计直线右侧的点数,旋转卡壳即可. 时间复杂度$O(n\log n)$. #includ ...

  4. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) D.Dinner Bet 概率DP+排列组合

    题目链接:点这里 题意: 1~N标号的球 现在A有C个,B有C个 每次可以随机得到D个不同的球(1~N);问你A或B中的C个球都出现一次的 期望次数 题解: dp[i][j][k]表示 随机出现了i个 ...

  5. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) E.Passwords AC自动机+dp

    题目链接:点这里 题意: 让你构造一个长度范围在[A,B]之间 字符串(大小写字母,数字),问你有多少种方案 需要满足条件一下: 1:构成串中至少包含一个数字,一个大写字母,一个小写字母:   2:不 ...

  6. 2017-2018 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2017)

    A. Cakey McCakeFace 按题意模拟即可. #include<stdio.h> #include<iostream> #include<string.h&g ...

  7. 2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)

    A. Arranging Hat $f[i][j]$表示保证前$i$个数字有序,修改了$j$次时第$i$个数字的最小值. 时间复杂度$O(n^3m)$. #include <bits/stdc+ ...

  8. 2016-2017 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2016)

    题目链接  Codefores_Gym_101164 Solved  6/11 Penalty Problem A Problem B Problem C Problem D Problem E Pr ...

  9. 2017-2018 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2017)

    2017-2018 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2017) 全靠 wxh的博客 补完这套.wx ...

随机推荐

  1. hdu 1022:Train Problem I(数据结构,栈,递归,dfs)

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. XML基础知识-->Spring配置

    XML的特殊字符 XML中共有5个特殊的字符,分别是:&<>“’.如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理.有两种解决方法:其一,采用本例中的<![CDAT ...

  3. 介绍MFC框架中涉及到的设计模式(二)

    接着上一篇<介绍MFC框架中涉及到的设计模式(一)>介绍 单例模式(Singleton Pattern) 单例模式是一种经常使用的软件设计模式.在它的核心结构中仅仅包括一个被称为单例类的特 ...

  4. LeetCode-Water and Jug Problem

    You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...

  5. ES6数组相关

    ES6数组新增的几个方法: 1. forEach() //forEach()遍历数组,无返回值,不改变原数组 var arr=[1,2,3,4] arr.forEach((item,index,arr ...

  6. AI画圆角矩形

    如何画圆角矩形:设置矩形圆角大小 第一种方法:点击圆角矩形在画布上点一下; [caption id="attachment_878" align="alignnone&q ...

  7. End-to-End Speech Recognition in English and Mandarin

    w语音识别.噪音.方言,算法迭代. https://arxiv.org/abs/1512.02595 We show that an end-to-end deep learning approach ...

  8. 更新openssl

    在安装nodejs或者nginx什么的时候,有时候会报如下错误 npm: relocation error: npm: symbol SSL_set_cert_cb, version libssl.s ...

  9. iros2016-Monday 10/10/2016

    Workshop Day Integrating Multiple Knowledge Representation and Reasoning Techniques in Robotics (MIR ...

  10. A Magic Lamp---hdu3183(链表删除| RMQ)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 给你一个长度<1000的数a,和m<len(a); 让把数a删除m个数字之后剩下的数 ...