ZZUOJ - 1245 - 寻找幸福的小L
来源:互联网 发布:中信淘宝v卡和淘气卡 编辑:程序博客网 时间:2024/04/28 04:47
郑州大学第八届ACM大学生程序设计竞赛正式赛
F.寻找幸福的小L
Description
小L最近看上了一个女同学叫小A,但是小A是个高冷的姑娘,所以她给小L出了个难题,她给小L留下了一张纸条,上面只有一个坐标,和一个时间,所以小L需要在规定时间找到这个坐标的地点,并在那个时间到哪个地点等待小A,但是很无奈,小L不是一个地理通,所以他找到了小A的室友,想知道一点信息,小A的室友就给了小L一共N个城市边角的坐标(假设每个城市都是一个M多边形),小L需要做的就是判断小A是不是在这个城市(在边上或在城市的顶点也算在城市中),所以小L就找到了神奇的ACMer,大家帮帮他找到他的小A吧
Input
测试数据有多组,你需要处理到文件结尾(EOF),每组的格式如下:
第一行为一个坐标X,Y 和两个数字N,M(-1000<=X,Y<=1000 ,1<=N<=100 ,3<=M<=100)
接下来N行每行有M个坐标(坐标将以逆时针的顺序给出,其中坐标都是整数)
Output
输出在第几个城市
Sample Input
5 5 2 4
2 0 4 0 4 4 2 4
2 0 6 0 6 6 2 6
Sample Output
2
HINT
题目保证一定存在答案,并且只会在一个城市中(即使城市有重叠)。而且给定的城市的多边形是凸多边形。
校赛时,KK大神在最后一秒A了这道题,隔了这么久,还是得写一写了。
核心的就是多边形的面积公式,把N边形分解成N-2个三角形,判断那个点在不在多边形内,就是求那个点与多边形每条边形成的三角形之和是不是等于多边形的面积,若等于,就在多边形内,因为用的是double,最后判断两个面积是否相等,用fabs(a1-a2)<=1e-6来判断
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;typedef struct{ //坐标 double x, y; }point;struct node{ //城市 point p[110];}c[110];double narea(point p1, point p2, point p3){ //求面积 double t1 = p1.x * p2.y + p3.x * p1.y + p2.x * p3.y; double t2 = p3.x * p2.y + p1.x * p3.y + p2.x * p1.y; return fabs(t1 - t2); } int main(){ point p; int n, m; while(scanf("%lf %lf %d %d", &p.x, &p.y, &n, &m)!=EOF){ for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) scanf("%lf %lf", &c[i].p[j].x, &c[i].p[j].y); int i; for(i = 0; i < n; i++) { double a1 = 0, a2 = 0; for(int j = 1; j < m-1; j++) //a1是多边形的面积 a1 += narea(c[i].p[0], c[i].p[j], c[i].p[j+1]); for(int j = 0; j < m-1; j++) //a2是那个点与多边形每个边形成三角形的面积和 a2 += narea(p, c[i].p[j], c[i].p[j+1]); a2 += narea(p, c[i].p[m-1], c[i].p[0]); if(fabs(a1-a2) < 1e-6) break; } printf("%d\n", i+1); } return 0;}
0 0
- ZZUOJ - 1245 - 寻找幸福的小L
- ZZUOJ - 1245 - 寻找幸福的小L
- ZZUOJ - 1245 - 寻找幸福的小L (郑州大学第八届ACM大学生程序设计竞赛正式赛F题)
- 寻找 身边的幸福
- ZZUOJ-10437: 小d的翻转游戏
- 生活,寻找幸福的感觉
- 寻找幸福
- 寻找幸福
- 寻找幸福
- 幸福的小女人
- 我的小幸福
- 幸福的小情调
- 简单的小幸福
- 人要学会自己寻找一些小幸福
- D的小L
- d的小l
- D的小L
- D的小L
- poj1936 All in All
- Ubuntu下查看已安装软件名称/卸载软件
- XSS攻击及防御
- 既然防火墙能当路由器用,那为什么还要用路由器呢?
- C# 连接调用MySQL
- ZZUOJ - 1245 - 寻找幸福的小L
- Linux共享内存简介
- 直接解析中缀表达式
- STM32定时器溢出模式设置
- HDU 2502 月之数
- Linux守护进程的编程实现 (转)
- JS闭包简单了解
- 微信应用签名生成工具
- nyoj 水池数目