USACO JAN14 奶牛冰壶运动 凸包+判定
满足条件的一定是在凸包内的,直接判断
恬不知耻的加了特判,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 奶牛冰壶运动 凸包+判定的更多相关文章
- 157. [USACO Nov07] 奶牛跨栏
157. [USACO Nov07] 奶牛跨栏(点击转到COGS) 输入文件:hurdles.in 输出文件:hurdles.out 时间限制:1 s 内存限制:128 MB 译 by CmY ...
- 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 ...
- SPFA cojs 176. [USACO Feb07] 奶牛聚会
cojs 176. [USACO Feb07] 奶牛聚会 ★☆ 输入文件:sparty.in 输出文件:sparty.out 简单对比时间限制:3 s 内存限制:16 MB N(1 ≤ ...
- cogs 141. [USACO Jan08] 奶牛的选举
141. [USACO Jan08] 奶牛的选举 ★ 输入文件:elect.in 输出文件:elect.out 简单对比时间限制:1 s 内存限制:16 MB 在推翻了Farmer J ...
- 题解 [USACO Mar08] 奶牛跑步
[USACO Mar08] 奶牛跑步 Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所 ...
- cogs157. [USACO Nov07] 奶牛跨栏 x
157. [USACO Nov07] 奶牛跨栏 ★★ 输入文件:hurdles.in 输出文件:hurdles.out 简单对比时间限制:1 s 内存限制:128 MB 译 by Cm ...
- 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)
157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in 输出文件:hurdles.out 简单对比 时间限制:1 s 内存限制:128 MB 译 by CmYkRg ...
- cogs 176. [USACO Feb07] 奶牛聚会 dijkstra
176. [USACO Feb07] 奶牛聚会 ★☆ 输入文件:sparty.in 输出文件:sparty.out 简单对比时间限制:3 s 内存限制:16 MB 译: zqzas N ...
- usaco 地震 && 奶牛观光
Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...
随机推荐
- Android studio统计项目总行数
有时候在项目开发中会用到统计项目的总行数功能,今天就教大家如何利用studio进行总行数的统计: 1.打开要统计总行数的项目,按住Ctrl+Shift+A(或者点击导航栏的Help->Find ...
- Best Time to Buy and Sell Stock i
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- 温故而后知新——对ado.net中常用对象的一些解释
在使用ado.net连接数据库获取数据,一般的步骤是: 1.设置好web.config //用来设置服务器数据库的地址以及登录名密码 2.创建Connection对象 //用来创建访问数据 ...
- Python笔记之 - 一张截图诠释"文件读写" !
Python笔记之 - 一张截图诠释"文件读写" ! 源代码如下: # 文件读写 str_test1 = "先创建txt文件再写入内容: 我是大帅哥" # wi ...
- SQL Server 远程更新目标表数据
分享一个远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库. ** 温馨提示:如需转载本文,请注明内容出处.** 本文连接:http://www.cnblogs.c ...
- 在Ubuntu系统安装Sencha CMD
Now type from the terminal prompt followed by Enter: 1 root@prompt:cd /java 1 root@prompt:tar zx ...
- 【数据可视化之Flask】快速设计和部署Flask网站
Flask是Python应用于WEB开发的第三方开源框架,以设计简单高效著称.我也尝试过Django,相对于Flask显得更加全面同样也更加笨重,并且我也不需要它的后台管理功能,因此选择了Flask作 ...
- memcached server install(WSL)
prepare:0) libevent-dev1) libseccomp-dev2) build-essential3) automake install: https://www.liquidweb ...
- mysql安装与配置(以mysql-5.7.10-winx64为例)
一.在官网上下载相应的mysql安装包,本人下载的是:mysql-5.7.10-winx64 (Windows (x86, 64-bit), ZIP Archive) 附下载地址:http://dev ...
- Java基础:JVM垃圾回收算法
众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成.本文介绍JVM进行垃圾回收的各种算法. 1. 如何确定某个对象是垃圾 1.1. 引用计数法 1.2. 可达性分析 2. 典型 ...