2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) B - Bribing Eve
地址: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的更多相关文章
- Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)
题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...
- 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 ...
- 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 ...
- 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个 ...
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) E.Passwords AC自动机+dp
题目链接:点这里 题意: 让你构造一个长度范围在[A,B]之间 字符串(大小写字母,数字),问你有多少种方案 需要满足条件一下: 1:构成串中至少包含一个数字,一个大写字母,一个小写字母: 2:不 ...
- 2017-2018 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2017)
A. Cakey McCakeFace 按题意模拟即可. #include<stdio.h> #include<iostream> #include<string.h&g ...
- 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+ ...
- 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 ...
- 2017-2018 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2017)
2017-2018 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2017) 全靠 wxh的博客 补完这套.wx ...
随机推荐
- 使用webdriverwait封装查找元素方法
对于selenium原生的查找元素方法进行封装,在timeout规定时间内循环查找页面上有没有某个元素 这样封装的好处: 1.可以有效提高查找元素的效率,避免元素还没加载完就抛异常 2.相对于time ...
- win7win8 64位汇编开发环境合集安装与设置
win7win8 64位汇编开发环境合集安装与设置 下载 win7 win8 64位汇编开发环境.rar 下载地址(免积分下载) http://download.csdn.net/detail/li ...
- Linux命令之乐--rename
用来修改文件名.重命名文件,批量重命名文件rename是最好的选择. 用法:rename from to files... [root@Director test]# ls a_01 a_02 [ro ...
- SQL 使用序列
SQL 使用序列 序列是根据需要产生的一组有序整数:1, 2, 3 ... 序列在数据库中经常用到,因为许多应用要求数据表中的的每一行都有一个唯一的值,序列为此提供了一种简单的方法. 本节阐述在 My ...
- WCF:并发处理
当多个线程同时访问相同的资源的时候就会产生并发,WCF缺省情况下会保护并发访问.对并发访问需要恰当处理,控制不好不仅会大大降低WCF服务的吞吐量和性能,而且还有可能会导致WCF服务的死锁.一.WCF并 ...
- 如何让listview滚动到底部
方法一: // msgListView是ListView控件 // adapter是ListView绑定的Adapter,如果不方便直接使用,也可以通过ListView的getAdapter()方法获 ...
- fullpage.js全屏滚动插件使用方法
在移动端经常会用到全屏滚动插件,实现常见H5活动页的效果,fullpage是一个很不错的jquery全屏滚动插件 fullpage.js插件的API:http://www.dowebok.com/77 ...
- echart使用总结
以下参数都是写在option配置对象内,没有提及的配置参数欢迎查阅读echart参考手册. 一. 修改主标题和副标题 title : { text: '未来一周气温变化',//写入主标题 subtex ...
- LVS,HAPROXY,NGINX各自的优缺点
Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件. LVS:使用集群技术和Linux操作系统实现一个高性能.高可用的服务器,它具有很好的可伸缩性.可靠性和可管理性,是一款强大 ...
- 2017 Multi-University Training Contest - Team 6—HDU6098&&HDU6106&&HDU6103
HDU6098 Inversion 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6098 题目意思:题目很短,给出一个数组,下标从1开始,现在输出一个 ...