Description
There are
N
points on a plane, among them
Input
The first line contains a single number
N
, the number of points.
Then come
N
lines each with two numbers
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;
}