Myacm Triangles

来源:互联网 发布:ps制作淘宝店招教程 编辑:程序博客网 时间:2024/06/05 11:42


#include <stdio.h>#include <algorithm>using namespace std;struct point{char name;int x;int y;}p[20];struct tri{point pp[3];double s;}triang[10000];int cmp(tri a, tri b){return a.s > b.s;}int main(){int num;while (scanf("%d", &num) && num != 0){getchar();int n = num;while (n--){scanf("%c%d%d", &p[n].name, &p[n].x, &p[n].y);getchar();}int count = 0;for (int i = 0; i < num - 2; i++)for (int j = i + 1; j < num - 1; j++)for (int k = j + 1; k < num; k++){triang[count].pp[0] = p[i];triang[count].pp[1] = p[j];triang[count].pp[2] = p[k];triang[count].s = fabs(0.5 * ((p[k].y - p[i].y) * (p[j].x - p[i].x) - (p[j].y - p[i].y) * (p[k].x - p[i].x)));count++;}sort(triang, triang + count, cmp);bool f  = false;for (int m = 0; m < count; m++){for (int i = 0; i < num; i++){if (p[i].name != triang[m].pp[0].name && p[i].name != triang[m].pp[1].name && p[i].name != triang[m].pp[2].name){double s1, s2, s3;s1 = fabs(0.5 * ((triang[m].pp[0].y - p[i].y) * (triang[m].pp[1].x - p[i].x) - (triang[m].pp[1].y - p[i].y) * (triang[m].pp[0].x - p[i].x)));s2 = fabs(0.5 * ((triang[m].pp[0].y - p[i].y) * (triang[m].pp[2].x - p[i].x) - (triang[m].pp[2].y - p[i].y) * (triang[m].pp[0].x - p[i].x)));s3 = fabs(0.5 * ((triang[m].pp[2].y - p[i].y) * (triang[m].pp[1].x - p[i].x) - (triang[m].pp[1].y - p[i].y) * (triang[m].pp[2].x - p[i].x)));if ((s1 + s2 + s3) <= triang[m].s)break;}if (i == num - 1){f = true;printf("%c%c%c\n", triang[m].pp[2].name, triang[m].pp[1].name, triang[m].pp[0].name);}}if (f)break;}}return 0;}

Myacm Triangles

大意:

给出最多15组的坐标,在这些坐标中找到一个三角形,该三角形满足面积最大,且三角形之中不包含其他的点,点在边上也不行;

要点:

找到3个一组的三角形,对其按面积排序,找到一个除了本身的三点其余点均在外部的三角形;

判断时可由面积法进行判断,找到一个点,使其与三角形的任意两点组成三个三角形,若s1+s2+s3=s则改点在三角形之内;

代码:


0 0
原创粉丝点击