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

恬不知耻的加了特判,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. LambdaToSql 发布 兰姆达转换sql

    文档目录索引 查询.函数.分组.排序.分页 添加 Insert into 编辑 Update set 删除 Delete 生成实体 内置常用工具类库  文档完善中... 事务处理 Join 连接查询 ...

  2. Day7 类的继承和继承实现的原理

    继承可以分为但继承,多继承. 继承的基本形式 class ParentClass1(object): #定义父类 pass class ParentClass2: #定义父类 pass class S ...

  3. mybatis源码解读(二)——构建Configuration对象

    Configuration 对象保存了所有mybatis的配置信息,主要包括: ①. mybatis-configuration.xml 基础配置文件 ②. mapper.xml 映射器配置文件 1. ...

  4. How To Install and Use Redis

    https://www.digitalocean.com/community/tutorials/how-to-install-and-use-Redis About Redis redis, dev ...

  5. ThinkPHP5从零基础搭建CMS系统(一)

    了解学习thinkphp5应该是2016年年底的事情,当时还没有接触过thinkphp3版本,觉得通过手册直接上手学习tp5蛮轻松的,现在从零记录下,搭建可扩展的CMS. 1.ThinkPHP环境搭建 ...

  6. string to int

    problem describe: given a string , first find the first word which is not white space;then there wil ...

  7. 学习AD、DA的体会

    AD转换器的转换是指模拟信号输入转化为数字信号输出,而DA转换器是把数字信号转换为模拟信号,在ADC0832.TLC549和TLC5615程序设计中,通过使用中断服务函数每0.5s对ADC0832进行 ...

  8. Generator的正确打开方式

    前两年大量的在写Generator+co,用它来写一些类似同步的代码但实际上,Generator并不是被造出来干这个使的,不然也就不会有后来的async.await了Generator是一个可以被暂停 ...

  9. Angular使用总结 ---以密码确认为例实现模版驱动表单的自定义校验

    上一篇 总结了模版驱动表单的基本用法,示例中的校验使用的是原生HTML5的校验方式,本文补上自定义校验的部分. HTML5原生的表单校验属性(必填,长度限制,取值间隔,正则表达式等等)可以满足普通的校 ...

  10. MySQL 数据库 Query 的优化

    理解MySQL的Query Optimizer MySQL Optimizer是一个专门负责优化SELECT 语句的优化器模块,它主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的Qu ...