2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) B - Bribing Eve
2017-07-19 21:08
531 查看
地址: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-8; const double pi=acos(-1.0); const int K=1e5+7; const int mod=1e9+7; double angle[K],tmp[K]; int n,m,ansa,ansb=K; int sgn(double ta,double tb) { if(fabs(ta-tb)<eps) return 0; return ta<tb?-1:1; } int sc(void) { int l=1,r=0; double nt1,nt2; for(int i=0;i<m;i++) { int tl=l,tr=r; nt1=tmp[i]+pi/2.0; nt2=tmp[i]-pi/2.0; while(r<n-1 && sgn(angle[r+1],nt1)<=0) r++; while(l<=r && sgn(angle[l],nt2)<0) l++; while(tr && sgn(angle[tr],nt1)==0) tr--; while(tr<n-1 && sgn(angle[tr+1],nt1)<0) tr++; while(tl<=tr && sgn(angle[tl],nt2)<=0) tl++; ansa=max(ansa,r-l+1); ansb=min(ansb,tr-tl+1); tr++; } } int main(void) { int sx,sy,tn=1,same=0; scanf("%d",&n); scanf("%d%d",&sx,&sy); for(int i=2,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)>=0 && sgn(angle[tn],pi)<=0) tmp[m++]=angle[tn]-pi/2.0; else if(sgn(angle[tn],-pi/2.0)>=0 && sgn(angle[tn],0.0)<=0) tmp[m++]=angle[tn]+pi/2.0; tn++; } n=tn; sort(angle+1,angle+tn); sort(tmp,tmp+m); sc(); printf("%d %d\n",n-ansa,n-ansb+same); return 0; }
相关文章推荐
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) F dfs序+树状数组
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) E.Passwords AC自动机+dp
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) D.Dinner Bet 概率DP+排列组合
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
- 2017-2018 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2017)
- 2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)
- 2016-2017 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2016) C Castle (kmp)
- ACM Southwestern European Regional Programming Contest (SWERC) 2017 A map+暴力
- ACM Southwestern European Regional Programming Contest (SWERC) 2017 J 智商题(模m同余)
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15) C题Canvas Painting(单调队列)
- 2016-2017 ACM-ICPC Northeastern European Regional Contest (NEERC 16) Gym - 101190H bitset,逻辑表达式模拟
- ACM Southwestern European Regional Programming Contest (SWERC) 2017 F 水题
- ACM Southwestern European Regional Programming Contest (SWERC) 2017--Cakey McCakeFace
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)训练总结【7/10】
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15) A题Promotions
- 2016-2017 ACM-ICPC Northeastern European Regional Contest (NEERC 16) Gym - 101190E 询问离线,排序
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15) C - Canvas Painting(优先队列)
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest G - Gangsters in Central City
- 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) 题解