POJ1569 Myacm Triangles
Description

There has been considerable archeological work on the ancient Myacm culture. Many artifacts have been found in what have been called power fields: a fairly small area, less than 100 meters square where there are from four to fifteen tall monuments with crystals on top. Such an area is mapped out above. Most of the artifacts discovered have come from inside a triangular area between just three of the monuments, now called the power triangle. After considerable analysis archeologists agree how this triangle is selected from all the triangles with three monuments as vertices: it is the triangle with the largest possible area that does not contain any other monuments inside the triangle or on an edge of the triangle. Each field contains only one such triangle.
Archeological teams are continuing to find more power fields. They would like to automate the task of locating the power triangles in power fields. Write a program that takes the positions of the monuments in any number of power fields as input and determines the power triangle for each power field.
A useful formula: the area of a triangle with vertices (x1, y1), (x2, y2), and (x3, y3) is the absolute value of
0.5 * [(y3 - y1)(x2 - x1) - (y2 - y1)(x3 - x1)].
Input
There is at least one such power field described. The end of input is indicated by a 0 for the number of monuments. The first sample data below corresponds to the diagram in the problem.
Output
Sample Input
6
A 1 0
B 4 0
C 0 3
D 1 3
E 4 4
F 0 6
4
A 0 0
B 1 0
C 99 0
D 99 99
0
Sample Output
BEF
BCD
『题解』
题目大意是给一些点,这些点可以构成很多三角形。要在所有内部不含其它点的三角形中找出面积最大的。
枚举三角形的三个顶点a,b,c。主要问题在于如何判断三角形内没有其它的点。事实上,若点p在三角形abc内,则叉积(a - b) ^ (p - b),(b - c) ^ (p - c),(c - a) ^ (p - a)是同号的。此方法同样适用与判断点是否在凸多边形内。
三角形abc面积的求法题目给出了,用叉积|(a - b) ^ (c - b) / 2|。在满足条件的三角形中找面积最大的即可。
枚举三角形的三个顶点,对于每个三角形还要枚举判断内部是否包含其它点,因而时间复杂度为O(n ^ 4)。
『C++』
#include <iostream>
#include <cmath>
#include <algorithm>
#include <stdlib.h>
using namespace std; struct Vector {
double x, y;
Vector() :x(), y() {}
Vector(double xx, double yy) :
x(xx), y(yy) {}
}pts[]; int n; double operator ^(const Vector &v1, const Vector &v2) {
return v1.x * v2.y - v1.y * v2.x;
} Vector operator -(const Vector &v1, const Vector &v2) {
return Vector(v1.x - v2.x, v1.y - v2.y);
} double Area(const Vector &A, const Vector &B, const Vector &C) {
return fabs(0.5 * ((B - A) ^ (C - A)));
} bool InTriangle(const Vector &A, const Vector &B,
const Vector &C, const Vector &P) {
double d1 = (A - B) ^ (P - B);
double d2 = (B - C) ^ (P - C);
double d3 = (C - A) ^ (P - A); if ((d1 >= && d2 >= && d3 >= ) ||
(d1 <= && d2 <= && d3 <= ))
return true;
return false;
} bool Check(int pn1, int pn2, int pn3) {
for (int i = ; i < n; i++) {
if (i == pn1 || i == pn2 || i == pn3)
continue;
if (InTriangle(pts[pn1], pts[pn2], pts[pn3], pts[i]))
return false;
}
return true;
} int main()
{
while (scanf_s("%d", &n) == && n) {
if (n == )break; double ans = ;
int num[] = {}; for (int i = ; i < n; i++) {
char c;
cin >> c >> pts[i].x >> pts[i].y;
} for(int i = ; i < n; i++)
for(int j = i + ; j < n; j++)
for(int k = j+; k < n; k++)
if (Check(i, j, k)) {
double area = Area(pts[i], pts[j], pts[k]);
if (ans < area) {
ans = area;
num[] = i;
num[] = j;
num[] = k;
}
} printf("%c%c%c\n", 'A' + num[], 'A' + num[], 'A' + num[]);
} //system("pause");
return ;
}
POJ1569 Myacm Triangles的更多相关文章
- ACM学习历程——UVA10112 Myacm Triangles(计算几何,多边形与点的包含关系)
Description Problem B: Myacm Triangles Problem B: Myacm Triangles Source file: triangle.{c, cpp, j ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- Count the number of possible triangles
From: http://www.geeksforgeeks.org/find-number-of-triangles-possible/ Given an unsorted array of pos ...
- [ACM_搜索] Triangles(POJ1471,简单搜索,注意细节)
Description It is always very nice to have little brothers or sisters. You can tease them, lock them ...
- acdream.Triangles(数学推导)
Triangles Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit Stat ...
- UVA 12651 Triangles
You will be given N points on a circle. You must write a program to determine how many distinctequil ...
- Codeforces Gym 100015F Fighting for Triangles 状压DP
Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph ...
- Codeforces Round #309 (Div. 1) C. Love Triangles dfs
C. Love Triangles Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/553/pro ...
随机推荐
- mst总结
1.jsonp跨域 Jsop的原理:利用script不存在跨域的问题,动态创建script标签,把需要请求的数据源地址赋值给其src属性,并且指定一个回调函数,从而接受到我们想要的数据 后台设置下 ...
- 短信猫+kannel调试一例
同事做一短信网关平台,采用kannel软件. 安装正常,配置文件如下: # Vodafone 3G cardgroup = coreadmin-port = 13000admin-password = ...
- JS 中的广度与深度优先遍历
现在有一种类似树的数据结构,但是不存在共同的根节点 root,每一个节点的结构为 {key: 'one', value: '1', children: [...]},都包含 key 和 value,如 ...
- 用Python自动发送邮件
用Python自动发送邮件 最近需要在服务器上处理一些耗时比较长的任务,因此想到利用python写一个自动发送邮件的脚本,在任务执行完毕后发送邮件通知我.以下代码以163邮箱为例: 开通163 ...
- leetcode python 010
#实现正则表达式匹配并支持'.'和'*'.#''匹配任何单个字符.#'*'匹配前面元素的零个或多个.#匹配应覆盖整个输入字符串(非部分).##Some examples:##isMatch(" ...
- js 面试知识点
基础 原型 原型链 作用域 闭包 异步 单线程 JS API DOM操作 AJAX 事件绑定 开发环境 版本管理 模块化 打包工具 运行环境 页面渲 ...
- 深入path类
Path类放在System.IO命名空间里.Path是一个只包含有静态方法的实例类,所以它不需要在使用之前实例化.它有各种方法用于处理文件的扩展名.文件名.根路径,以及和更多和路径相关的方面.下面就是 ...
- nginx传世经典
nginx的简单介绍与安装nginx的简单介绍 一.Nginx的产生 Nginx是一款高性能的 HTTP 和反向代理服务器,由俄罗斯人Igor Sysoev(伊戈尔·赛索耶夫)为俄罗斯网站Ramble ...
- JDK8源码之Arrays
Arrays是一个工具类,包含了各种数组的操作方法,包括排序.搜索.转化,在JDK1.8中新增了一些方法,对原有一些方法的并发性做了增强,极大地提高了原有方法的性能. 1.rangeCheck(int ...
- Python 进程池的异步方法
import time from multiprocessing import Process,Pool def f1(n): time.sleep(0.5) # print(n) return n* ...