题目大意:给你n个点的坐标,任意找出一个三个点的组合,使得这三个点构成的三角形面积不为0,且三角形里面没有别的点。数据保证有解。
贪心。先按照xy排序,前两个点必取,从第3个点开始找,直到找到一个可以和1、2点构成三角形的第一个点。输出标号。注意判三点共线。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
struct dian{
double x,y;
int hao;
bool friend operator<(dian a,dian b){
return a.x!=b.x?a.x<b.x:a.y<b.y;
}
}a[110000];
int n;
bool BUGONG(int x){
double dx=a[1].x-a[2].x,dy=a[1].y-a[2].y;
double cx=a[1].x-a[x].x,cy=a[1].y-a[x].y;
if(abs(dx*cy-dy*cx)<0.00001)return 0;
return 1;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y);
for(int i=1;i<=n;i++)a[i].hao=i;
sort(a+1,a+1+n);
for(int i=3;i<=n;i++){
if(BUGONG(i)){
printf("%d %d %d\n",a[1].hao,a[2].hao,a[i].hao);
break;
}
}
return 0;
}