Cow Uncle

Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
SubmitStatus

Problem Description

South China Algorithm University (SCAU) 是一个生态环境优秀的校园。走在校道上,你可以看见牛羊猫狗鸡鸭鹅,等等。

牛在校道上走当然不是没人管的。放牛大叔通常会带N头大牛小牛去到一片宽阔的草地上吃草,草地上有M块大石头,放牛大叔会在石头上坐着,看着这群大牛小牛。当然,并非所有石头的位置都是那么好,放牛大叔要看着所有的牛,所以挑选的位置P的视野必须小于180度(也就是在他面前,最左边的牛A和最右边的牛B与P形成的角度∠APB不能大于等于180度)。

现在给出N头大牛小牛的位置,然后给出M个石头的位置,请你分别求出每个石头是否可以看着全部牛。如果可以,求出相应位置的视野度数。(可以假设大牛小牛不会在石头上吃草,而且大牛小牛都很聪明,不会在吃同一位置的草)

Input

有多组数据输入。

每组数据第一个数是牛的个数N,之后N行每行有两个数(Xi, Yi),表示牛的位置。

紧接着的是石头的个数M,之后M行有每行有两个数(Xj, Yj),表示石头的位置。

数据范围:

3≤M,N≤1000

|Xi|,|Yi|≤1000000

输入数据保证不会全部牛都在同一条直线上。

Output

对于每一块石头输出一行。如果这个位置的视野可以看到全部的牛,那么输出这个位置的视野的度数是多少(保留两位小数)。否则,输出“Bad Position”。

Sample Input

4
0 0
1 0
1 1
0 1
3
0.5 0.5
1 0.5
2 0

Sample Output

Bad Position
Bad Position
45.00
 #include<iostream>
#include<algorithm>
#include<math.h>
#include<stdio.h>
using namespace std;
#define PI 3.1415926535898
struct point
{
double x,y;
};
point p[],res[];
int n,top;
double Dist(const point &arg1, const point &arg2)
{
return sqrt( 1.0*(arg1.x - arg2.x)*(arg1.x - arg2.x) + (arg1.y - arg2.y)*(arg1.y - arg2.y) );
}
bool multi(point p0,point p1,point p2)
{
return (p1.x-p0.x)*(p2.y-p0.y)>=(p2.x-p0.x)*(p1.y-p0.y);
}
bool cmp(const point &a,const point &b)
{
point temp=p[];
double xmt=(a.x-temp.x)*(b.y-temp.y)-(b.x-temp.x)*(a.y-temp.y);
if(xmt) //向量不共线就按逆时针旋转
return xmt>;
return Dist(a,temp)>Dist(b,temp);//向量共线取最长的。
}
void graham()//p[0]是左下角的元素
{
res[]=p[];
sort(p+,p+n,cmp);//按照极角排序
res[]=p[];
res[]=p[];
top=;
for(int i=; i<n; i++)
{
while(multi(p[i],res[top],res[top-]))
top--;
res[++top]=p[i];
}
}
bool check(point temp)
{
int i,m=multi(temp,res[],res[]);
for(i=;i<top;i++)
{
if(multi(temp,res[i],res[i+])!=m)return ;
}
if(multi(temp,res[i],res[])!=m)return ;
return ;
}
void work(point temp)
{
int bi,en;
bi=en=;
for(int i=;i<=top;i++)
{
if(multi(temp,res[i],res[bi]))bi=i;
if(multi(temp,res[en],res[i]))en=i;
}
double ans=atan2(res[en].y-temp.y,res[en].x-temp.x)-atan2(res[bi].y-temp.y,res[bi].x-temp.x);
if(ans<0.0)ans+=*PI;
ans=ans*/PI;
printf("%.2lf\n",ans);
}
int main()
{
int i,mina,m;
point temp;
while(~scanf("%d",&n))
{
scanf("%lf%lf",&p[].x,&p[].y);
mina=;
for(i=; i<n; i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
if(p[i].y<p[mina].y||(p[i].y==p[mina].y&&p[i].x<p[mina].x))
mina=i;
}
swap(p[].x,p[mina].x),swap(p[].y,p[mina].y);
graham();
scanf("%d",&m);
while(m--)
{
scanf("%lf%lf",&temp.x,&temp.y);
if(check(temp))
{
printf("Bad Position\n");
}
else
{
work(temp);
}
}
}
}

Cow Uncle 学习了叉积的一点运用,叉积真的不错的更多相关文章

  1. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  2. 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

  3. 学习R语言的一点小心得

    1.目前R 语言处于入门阶段吧,能够执行一些简单的模型了,还是有收获的. 但是在跑模型的时候经常遇到各种各样的错误,最常见的错误就是数据带入模型之后,数据的类型不对,因此模型跑不下去,因此说,利用he ...

  4. 从Python学习中得到的一点启发 - Java逆向索引ArrayList

    看了几天Python,感觉记忆力不行了,很多东西记不住了.但是终归是得到了一点知识:重写一个ArrayList,允许从负值的索引得到指定的项.然后写一个得到斐波拉契数组的方法,这种方法要比递归调用的方 ...

  5. 学习KMP算法的一点小心得

    KMP算法应用于 在一篇有n个字母的文档中 查找某个想要查找的长度为m的单词:暴力枚举:从文档的前m个字母和单词对比,然后是第2到m+1个,然后是第3到m+2个:这样算法复杂度最坏就达到了O(m*n) ...

  6. 推荐一篇关于java 学习的文章,感觉写的很不错

    ---恢复内容开始---    很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔".但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛 ...

  7. P2966 [USACO09DEC]Cow Toll Paths G

    题意描述 Cow Toll Paths G 这道题翻译的是真的不错,特别是第一句话 给定一张有 \(n\) 个点 \(m\) 条边的无向图,每条边有边权,每个点有点权. 两点之间的路径长度为所有边权 ...

  8. C json实战引擎 三 , 最后实现部分辅助函数

    引言 大学读的是一个很时髦的专业, 学了四年的游戏竞技. 可惜没学好. 但认真过, 比做什么都认真. 见证了  ...... 打的所有游戏人物中 分享一位最喜爱 的 “I've been alone ...

  9. 浅记初次使用expect、scp中出现的一些小问题

    以前也学过一些shell,不过学得并不是很深入,动手写的代码的时间也不是很多.前不久将shell比较细的过了一遍,leader布置了任务让用shell写一个脚本将redis源码压缩包从一个服务器上传到 ...

随机推荐

  1. python3 安装及项目管理安装

    python3 一.下载安装 地址:https://www.python.org/downloads/ 安装:傻瓜式安装:我的目录如下 二.环境配置 [右键计算机]-->[属性]-->[高 ...

  2. JQuery操作iframe父页面与子页面的元素与方法

    JQuery操作iframe父页面与子页面的元素与方法 JQUERY IFRAME 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现. 第一.在iframe中查找父页面元 ...

  3. 【完整资料】TC358779XBG:HDMI转MIPI DSI芯片方案

    TC358779XBG是一颗HDMI1.4转MIPI  DSI带缩放功能的芯片,分辨率1920*1080,封装BGA80.通信方式:IIC,电源3.3/1.8/2.2,应用领域:平板,广告机,VR,显 ...

  4. loadrunner scripts

    1. ReadFile: Action(){ int count,total=0; char buffer [50]; long file_stream; char * filename = &quo ...

  5. caffe cifar10试跑问题总结

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  6. SQL菜鸟学习札记(二)

    五月份一直在写SQL,之后写了一个期末大作业的项目,现在才有时间把之前遇到的各种奇怪的问题整理出来.下一部分札记应该是大作业中使用到的SQL的整理. 一.UPDATE SET语句后面可以并列赋值. 之 ...

  7. MPLS LDP随堂笔记1

    LDP 的使用原因(对于不同协议来说) LDP的四大功能 发现邻居 hello 5s 15s 224.0.0.2 发现邻居关系 R1 UDP 646端口 R2 UDP 646端口 此时形成邻居 建立邻 ...

  8. 结对编程1——四则运算-GUI

    码市链接:https://coding.net/u/hmhhh/p/hmh-homework/git/tree/master/ 201421123003 黄建英 201421123004 黄美海 题目 ...

  9. 201521123082 《Java程序设计》第1周学习总结

    201521123082 <Java程序设计>第1周学习总结 标签(空格分隔): Java 1. 本周学习总结 0.初步了解Java语言及其发展历史和过程,同时也初步了解了Java具有跨平 ...

  10. 201521123028 《Java程序设计》第5周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. Ch ...