满足条件的一定是在凸包内的,直接判断

恬不知耻的加了特判,2333

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 50050
using namespace std;
int n,ss[N],top,topa,topb,ans1,ans2;
bool bo=0;
struct point{
double x,y;
}a[N],b[N],o,p[N];
double operator * (point a,point b){return a.x*b.y-b.x*a.y;}
point operator - (point a,point b){return (point){a.x-b.x,a.y-b.y};}
double dis(point a,point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
bool operator < (point a,point b){
double s=(a-o)*(b-o);
if(s==0) return dis(a,o)<dis(b,o);
return s>0;
}
void graham(point *gy){
ss[++top]=1;
for(int i=2;i<=n;i++){
while(top>1&&(gy[i]-gy[ss[top-1]])*(gy[ss[top]]-gy[ss[top-1]])>0) top--;
ss[++top]=i;
}
}
bool checka(point b){
int l=1,r=topa,mid;
while(l<=r){
mid=(l+r)>>1;
double a1=(a[ss[mid]]-a[ss[1]])*(b-a[ss[1]]);
double a2=(a[ss[mid+1]]-a[ss[1]])*(b-a[ss[1]]);
if(a1>=0&&a2<=0){
if((a[ss[mid+1]]-a[ss[mid]])*(b-a[ss[mid]])>=0) return 1;
return 0;
}
else{
if(a1<0) r=mid-1;
else l=mid+1;
}
}
return 0;
}
bool checkb(point a){
int l=topa+1,r=topb,mid;
while(l<=r){
mid=(l+r)>>1;
double a1=(b[ss[mid]]-b[ss[topa+1]])*(a-b[ss[topa+1]]);
double a2=(b[ss[mid+1]]-b[ss[topa+1]])*(a-b[ss[topa+1]]);
if(a1>=0&&a2<=0){
if((b[ss[mid+1]]-b[ss[mid]])*(a-b[ss[mid]])>=0) return 1;
return 0;
}
else{
if(a1<0) r=mid-1;
else l=mid+1;
}
}
return 0;
}
int main()
{
freopen("curling.in","r",stdin);
freopen("curling.out","w",stdout);
scanf("%d",&n);
int yx=1;
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
if((a[i].x<a[yx].x)||(a[i].x==a[yx].x&&a[i].y<a[yx].y))yx=i;
if(a[i].x!=0) bo=1;
}
o=a[yx]; swap(a[1],a[yx]);
sort(a+2,a+n+1);
//for(int i=1;i<=n;i++)p[i]=a[i];
graham(a); topa=top;
yx=1;
for(int i=1;i<=n;i++){
scanf("%lf%lf",&b[i].x,&b[i].y);
if((b[i].x<b[yx].x)||(b[i].x==b[yx].x&&b[i].y<b[yx].y))yx=i;
if(b[i].x!=0) bo=1;
}
if(!bo){
printf("%d %d\n",n-1,n-1);
return 0;
}
o=b[yx]; swap(b[1],b[yx]);
sort(b+2,b+n+1);
graham(b); topb=top;
for(int i=1;i<=n;i++)
if(checka(b[i]))
ans1++;
for(int i=1;i<=n;i++)
if(checkb(a[i]))
ans2++;
printf("%d %d\n",ans1,ans2);
return 0;
}

USACO JAN14 奶牛冰壶运动 凸包+判定的更多相关文章

  1. 157. [USACO Nov07] 奶牛跨栏

    157. [USACO Nov07] 奶牛跨栏(点击转到COGS) 输入文件:hurdles.in   输出文件:hurdles.out 时间限制:1 s   内存限制:128 MB 译 by CmY ...

  2. ZOJ 3537 Cake(凸包判定+区间DP)

    Cake Time Limit: 1 Second Memory Limit: 32768 KB You want to hold a party. Here's a polygon-shaped c ...

  3. SPFA cojs 176. [USACO Feb07] 奶牛聚会

    cojs 176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB N(1 ≤ ...

  4. cogs 141. [USACO Jan08] 奶牛的选举

    141. [USACO Jan08] 奶牛的选举 ★   输入文件:elect.in   输出文件:elect.out   简单对比时间限制:1 s   内存限制:16 MB 在推翻了Farmer J ...

  5. 题解 [USACO Mar08] 奶牛跑步

    [USACO Mar08] 奶牛跑步 Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所 ...

  6. cogs157. [USACO Nov07] 奶牛跨栏 x

    157. [USACO Nov07] 奶牛跨栏 ★★   输入文件:hurdles.in   输出文件:hurdles.out   简单对比时间限制:1 s   内存限制:128 MB 译 by Cm ...

  7. 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)

    157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in   输出文件:hurdles.out   简单对比 时间限制:1 s   内存限制:128 MB 译 by CmYkRg ...

  8. cogs 176. [USACO Feb07] 奶牛聚会 dijkstra

    176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB 译: zqzas N ...

  9. usaco 地震 && 奶牛观光

    Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...

随机推荐

  1. angularjs系列之轻松使用$q进行异步编程

    第一部分关于js中的异步编程 异步编程简单的说就是你写了一段代码,但他不会按照你书写代码的顺序立即执行,而是等到程序中发生了某个事件(如用户点击了某个按钮,某个ajax请求得到了响应)才去执行这段代码 ...

  2. windows下mongodb安装详解

    1.打开官网https://www.mongodb.com/download-center?jmp=nav#community 注:这里小伙伴们可是开启下FQ软件psiphon 3下载(不开启FQ好像 ...

  3. 自动生成MyEclipse 安装破解码

    新建一个class 文件,Debug 模式运行一个,输入任意值 ,回车得到破解安装码 代码文件如下: import java.io.*; public class MyEclipseGen { pri ...

  4. 几个大型网站的Feeds(Timeline)设计简单对比

    https://mp.weixin.qq.com/s?__biz=MjM5NzQ3ODAwMQ==&mid=404465806&idx=1&sn=3a68a786138538f ...

  5. Tomcat配置多实例:centos和winserver环境

    CentOS:配置多Tomcat:     1.下载:# wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.44/bin/apache- ...

  6. htmlparser 学习

    htmlparser 学习系列 htmlparser 使用法使用与详解

  7. Apache 、Tomcat、Nginx的区别

    一. 定义: 1. Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上.其属于应用服务器.Apache支持支持模块多,性能稳定,Apache本身是 ...

  8. jsp 增删改查

    使用Idea创建项目 1.新建web application项目 Idea 选择 Java Enterprise -> web application 2.新版本没有web-inf文件夹 解决方 ...

  9. python_黑洞数

    >>> def main(n): start = 10**(n-1)+2 end = start*10-20 for i in range(start,end): i = str(i ...

  10. mybatis自定义代码生成器(Generator)——自动生成model&dao代码

    花了两天的时间研究了下mybatis的generator大体了解了其生成原理以及实现过程.感觉generator做的非常不错,给开发者也留足了空间.看完之后在generator的基础上实现了自定义的生 ...