# UESTC 802 E - Just a Line

143人阅读 评论(0)

Description
There are N$N$ points on a plane, among them N1$N-1$ points will form a line, your task is to find the point that is not on the line.

Input
The first line contains a single number N$N$, the number of points. (4N50000)$(4\leq N\leq 50000)$

Then come N$N$ lines each with two numbers (xi,yi)$(x_{i}, y_{i})$, giving the position of the points. The points are given in integers. No two points’ positions are the same. (109xi,yi109)$(-10^9\leq x_{i}, y_{i}\leq 109)$

Output
Output the position of the point that is not on the line.

Sample Input
5
0 0
1 1
3 4
2 2
4 4

Sample Output
3 4

（排序那一段没用的gg）

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
typedef struct
{
int x;int y;
}Node;
int Sort(const void * a,const void * b)
{
Node *p1=(Node *)a;
Node *p2=(Node *)b;
return p1->x>p2->x;
}
int main (void)
{
Node point[100000];
int t ;
cin>>t;
for(int i=0;i<t;i++)
{
scanf("%d %d",&point[i].x,&point[i].y);
//  printf("%d %d\n",point[i].x,point[i].y);
}

qsort(point,t,sizeof(Node),Sort);
//  printf("after\n");
//  for(int i=0;i<t;i++)
//  {
//      printf("%d %d\n",point[i].x,point[i].y);
//  }

//  printf("-------------\n");
int ans1,ans2;
int tmp1,tmp2;
for(int k=0;k<=3;k++)
{
for(int j=0;j<k;j++)
{
for(int i=0;i<j;i++)
{
if((point[j].y-point[i].y)*(point[k].x-point[i].x)==(point[k].y-point[i].y)*(point[j].x-point[i].x))
{
ans1=point[k].x-point[i].x;
ans2=point[k].y-point[i].y;
tmp1=point[i].x;
tmp2=point[i].y;
break;
}
}
}
}

for(int i=0;i<t;i++)
{
if((point[i].y-tmp2)*ans1!=ans2*(point[i].x-tmp1))

{
printf("%d %d\n",point[i].x,point[i].y);
break;
}
}

return 0;
}
0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：14179次
• 积分：902
• 等级：
• 排名：千里之外
• 原创：80篇
• 转载：6篇
• 译文：0篇
• 评论：0条
评论排行