ZZUOJ - 1245 - 寻找幸福的小L ( 郑州大学第八届ACM大学生程序设计竞赛正式赛F题)

原创 2014年12月08日 19:50:45


1245: 寻找幸福的小L

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 60  Solved: 14
[Submit][Status][Web Board]

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



题目保证一定存在答案,并且只会在一个城市中(即使城市有重叠)而且给定的城市的多边形是凸多边形。


Source



比赛时,做的最逗比的一个题,简直简单啊,我却还傻X的没做出来,之前思路错了,样例没过(其实也没错,只要加个fabs就差不多过了),之后看到了模板,就兴冲冲敲起模板,真他妈浪费时间啊。。之后也没过。。唉,真想抱着个人哭啊。。


思路:先全部输入,然后逐个城市来,利用从第一个点开始划分三角形来算出整个城市的面积,再利用这个就可以算出点和城市每两个点(逆时针一圈)组成三角形面积之和,如果这两个面积相等的话点就在城市里。


AC代码:


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

typedef struct
{
	double x, y;	
}point;

struct node
{
	point pos[110];
}city[110];

double area2(point A, point B, point C)  
{  
    double tmp1 = A.x * B.y + C.x * A.y + B.x * C.y;  
    double tmp2 = C.x * B.y + A.x * C.y + B.x * A.y;  
      
    return fabs(tmp1 - tmp2);  
}  

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", &city[i].pos[j].x, &city[i].pos[j].y);
			}
		}
		int i;
		for(i=0; i<n; i++)
		{
			double ar1=0, ar2=0;
			for(int j=1; j<m-1; j++)     //算出整个城市的面积 
			{
				ar1+=area2(city[i].pos[0], city[i].pos[j], city[i].pos[j+1]);
			}
			for(int j=0; j<m-1; j++)     //算出点和城市每两个点(逆时针一圈)组成三角形面积之和 
			{
				ar2+=area2(p, city[i].pos[j], city[i].pos[j+1]);
			}
			ar2+=area2(p, city[i].pos[m-1], city[i].pos[0]);
			if(fabs(ar1-ar2)<=1e-7)break;
		}		
		printf("%d\n", i+1);
	}
	return 0;
} 






版权声明:本文为博主原创文章,未经博主允许不得转载。

第八届福建省大学生程序设计竞赛 L.Tic-Tac-Toe【思维+暴力枚举】

Problem 2283 Tic-Tac-Toe Accept: 31    Submit: 42 Time Limit: 1000 mSec    Memory Limit : 262144 KB...
  • mengxiang000000
  • mengxiang000000
  • 2017年07月23日 21:56
  • 370

第八届ACM趣味程序设计竞赛第四场(正式赛)A B C

周日刚打算午觉躺下,舍友说今天有比赛,所以就..凑个热闹..
  • sinat_24568351
  • sinat_24568351
  • 2016年12月18日 18:30
  • 359

“浪潮杯”山东省第八届ACM大学生程序设计竞赛 J

company Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description Th...
  • C18854805113
  • C18854805113
  • 2017年05月13日 13:51
  • 386

2016中国大学生程序设计竞赛 - 网络选拔赛题解报告

2016中国大学生程序设计竞赛 - 网络选拔赛题解报告
  • queuelovestack
  • queuelovestack
  • 2016年08月14日 18:37
  • 3912

fzu 2277 Change [第八届福建省大学生程序设计竞赛 Problem F] [线段树]

点击打开题目 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v '] += x – k(v '为v的...
  • hnust_xx
  • hnust_xx
  • 2017年07月23日 15:42
  • 556

"浪潮杯”山东省第八届ACM大学生程序设计竞赛 CF

01背包要用到贪心,这个贪心好像做过,又好像没做过,可能当时抄的百度吧。 就是这个01背包的价值是变化的,所以要先放最值得放的。开始怎么都想不通, 这样想如果都能做出来,而且每个都会是正分,先做那...
  • clx55555
  • clx55555
  • 2017年05月09日 18:45
  • 584

“浪潮杯”山东省第八届ACM大学生程序设计竞赛F

quadratic equation Time Limit: 2000MS Memory Limit: 131072KB Submit Statistic Problem Descr...
  • C18854805113
  • C18854805113
  • 2017年05月13日 13:32
  • 559

nyoj 1239 引水工程 (河南省第八届acm程序设计大赛)

题目1239题目信息运行结果本题排行讨论区 引水工程 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 南水北调工程是优化水资源配置、促进区域协调发展的基础性工程,是新...
  • su20145104009
  • su20145104009
  • 2016年02月17日 18:22
  • 2779

ZZUOJ - 1245 - 寻找幸福的小L

郑州大学第八届ACM大学生程序设计竞赛正式赛 F.寻找幸福的小L Description小L最近看上了一个女同学叫小A,但是小A是个高冷的姑娘,所以她给小L出了个难题,她给小L留下了一张纸条...
  • violet_echo_0908
  • violet_echo_0908
  • 2015年07月23日 15:54
  • 467

ZZUOJ - 1245 - 寻找幸福的小L

郑州大学第八届ACM大学生程序设计竞赛正式赛 F.寻找幸福的小LDescription小L最近看上了一个女同学叫小A,但是小A是个高冷的姑娘,所以她给小L出了个难题,她给小L留下了一张纸条,上面只有一...
  • qq_21120027
  • qq_21120027
  • 2015年11月28日 14:59
  • 228
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZZUOJ - 1245 - 寻找幸福的小L ( 郑州大学第八届ACM大学生程序设计竞赛正式赛F题)
举报原因:
原因补充:

(最多只允许输入30个字)