poj 1569 Myacm Triangles

通过面积,,来判断是否在三角行内,,

//allblue All Rights Reserved
//.....
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <string.h>
#include <algorithm>
#include <functional>
using namespace std;
#define PI acos(-1)
#define eps 1e-5
#define INF 1e16
typedef long long ll;

int sgn(double d) {
  return (d>+eps)-(d<-eps);
}

int fcmp(double a, double b) {
  return sgn(a-b);
}

struct Pnt{
	char name[3];
	double x,y;
	Pnt(){};
	Pnt(double a,double b){
		x=a,y=b;
	}
	
	friend Pnt operator + (Pnt a,Pnt b){
		Pnt c;
		c.x=a.x+b.x;
		c.y=a.y+b.y;
		return c;
	}
	
	friend Pnt operator - (Pnt a,Pnt b){
		Pnt c;
		c.x=a.x-b.x;
		c.y=a.y-b.y;
		return c;
	}	
	
	friend double operator * (Pnt a,Pnt b){
		return a.x*b.x+a.y*b.y;
	}
	
	friend double operator ^ (Pnt a,Pnt b){
		return a.x*b.y-a.y*b.x;
	}
	
	friend bool operator == (Pnt a,Pnt b) {
		return fcmp(a.x, b.x)==0 && fcmp(a.y, b.y)==0;
	}
};

struct Seg{
	Pnt a;
	Seg(){};
	Seg(Pnt x,Pnt y){
		a=y-x;
	}
	
	friend Seg operator + (Seg a,Seg b){
		Seg c;
		c.a.x=a.a.x+b.a.x;
		c.a.y=a.a.y+b.a.y;
		return c;
	}
	
	friend Seg operator - (Seg a,Seg b){
		Seg c;
		c.a.x=a.a.x-b.a.x;
		c.a.y=a.a.y-b.a.y;
		return c;
	}	
	
	friend double operator * (Seg a,Seg b){
		return a.a.x*b.a.x+a.a.y*b.a.y;
	}
	
	friend double operator ^ (Seg a,Seg b){
		return a.a.x*b.a.y-a.a.y*b.a.x;
	}
	
	double length(){
		return sqrt(a.x*a.x+a.y*a.y);
	}
	
};


double ffabs(double data){
	if (data<0) return -data;
	return data;
}

int main()
{
	int n;
	while(~scanf("%d",&n)&&n){
		Pnt po[20];
		for (int i=0;i<n;i++){
			scanf("%s%lf%lf",po[i].name,&po[i].x,&po[i].y);
		}
		
		char as[5];
		double anss=0;
		
		for (int i=0;i<n-2;i++){
			for (int is=i+1;is<n-1;is++){
				for (int j=is+1;j<n;j++){
					
					int flag=0;
					
					for (int k=0;k<n;k++){
						if (k!=i&&k!=is&&k!=j){
							double mian1=(0.5*ffabs((po[is]-po[i])^(po[j]-po[i])));
							double mian2=0.5*ffabs((po[i]-po[k])^(po[is]-po[k]));
							double mian3=0.5*ffabs((po[j]-po[k])^(po[is]-po[k]));
							double mian4=0.5*ffabs((po[i]-po[k])^(po[j]-po[k]));
							if(sgn(mian1-mian2-mian3-mian4)==0){
								flag=1;
								break;
							}
						}
					}
					
					if (!flag){
						if (anss<(0.5*ffabs((po[is]-po[i])^(po[j]-po[i])))){
							anss=0.5*ffabs((po[is]-po[i])^(po[j]-po[i]));
							as[0]=po[i].name[0];
							as[1]=po[is].name[0];
							as[2]=po[j].name[0];
							as[3]='\0';
						}
					}
					
				}
			}
		}
		sort(as,as+3);
		printf("%s\n",as);
		
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值