Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) C
排序选出最左下角的两个点,逐一和其他计算是否能组成三角形。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string.h>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <utility>
#include <complex>
using namespace std;
struct point
{
long long x, y;
int num;
}t[100005];
bool cmp(point x,point y)
{
if (x.x != y.x)
return x.x < y.x;
return x.y < y.y;
}
int main()
{
long long n;
cin >> n;
for (int i = 0;i < n;i++)
{
cin >> t[i].x >> t[i].y;
t[i].num = i;
}
sort(t, t + n, cmp);
for (int i = 2;i < n;i++)
{
if((t[i].x-t[0].x)*(t[i].y-t[1].y)!=(t[i].x-t[1].x)*(t[i].y-t[0].y))
{
cout << t[0].num+1 << ' ' << t[1].num+1 << ' ' << t[i].num+1 << endl;
break;
}
}
return 0;
}