CodeForces618C

xiaoxiao2021-02-28  108

题意是在给出的n个点中找出三个能够组成三角形,并要求其余的所有点都在三角形外。不存在所有的点都在同一条直线或者两个点重合的情况。 思路是用结构体数组记录下所有点后排序,选定最两个点后枚举第三个点,满足不在一条直线上则选定。 #include <iostream> #include <string> #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> #define maxn 100020 using namespace std; typedef long long ll; int n; struct Point { ll x,y; int id; }point[maxn]; bool check(Point a,Point b,Point c) { return (c.x-a.x)*(b.y-a.y)-(c.y-a.y)*(b.x-a.x)!=0; } bool cmp(Point a,Point b) { if(a.x!=b.x) { return a.x<b.x; } else { return a.y<b.y; } } int main() { ll x,y; while(~scanf("%d",&n)) { int m=0; for(int i=0;i<n;i++) { scanf("%llu%llu",&x,&y); point[i].x=x; point[i].y=y; point[i].id=i+1; } sort(point,point+n,cmp); for(int i=2;i<n;i++) { if(check(point[0],point[1],point[i])) { m=i; break; } } printf("%d %d %d\n",point[0].id,point[1].id,point[m].id); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-48143.html

最新回复(0)