COGS2090 Asm.Def找燃料

时间限制:1 s   内存限制:256 MBios

【题目描述】

 

“据说我们要完了?”比利·海灵顿拨弄着操纵杆,头也不回地问Asm.Def。程序员

“不要听得风就是雨。”网络

“开个玩笑嘛。不就是打机器人,紧张啥,你看人家凯尔·里斯,还能顺便谈个恋爱……”spa

这时空天飞机陡然抬起机头, Asm.Def被牢牢压在座椅上。不一会,仪表盘上的青蛙玩偶飞了起来,代表他们已经进入近地轨道。code

“华莱士比你还紧张,据说是要去什么无……”blog

“无线电焦点,在那能监听到透明计算网络控制的全部卫星。并且是已经去过了,因此我才会在这儿。”Asm.Def回答。内存

“这我知道,送你去拉格朗日点,大家的‘蓝翔’号星舰,只是有个小问题:没油了。”get

“什么?!”数学

“咱们能够去废弃卫星上找燃料。如今就差一个程序员。”string

咱们把太空看作一个二维平面。有N颗废弃卫星,第i颗的坐标是(xi,yi)。Asm.Def但愿从尽量多的卫星获取燃油,但他乘坐的空天飞机的飞行路径只能是一条直线,Asm.Def须要知道,这条直线最多能通过多少颗卫星。

 

【输入格式】

 

第1行1个整数N。

接下来N行,每行两个整数xi,yi,表示第i颗卫星的坐标。

 

【输出格式】

一行一个整数,即一条直线最多能通过多少颗卫星。

【样例输入】

6
0 0
0 2
2 0
2 2
1 1
0 0

【样例输出】

4

【提示】

 

对于30%的数据,1<=N<=10.

对于100%的数据,1<=N<=100,坐标为整数,绝对值<=10000.

 

写水题舒缓一下心情

 

数学问题 计算几何 暴力

这系列的题,题面都好神啊……

看了看数据范围,暴力怼过去好了。

$O(n^2)$枚举两点,而后$O(n)$判有多少点在线上

完毕

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #include<vector>
 8 using namespace std;
 9 const double eps=1e-7;
10 const int mxn=110;
11 int read(){
12     int x=0,f=1;char ch=getchar();
13     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
14     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
15     return x*f;
16 }
17 struct point{
18     double x,y;
19     point operator + (point b){return (point){x+b.x,y+b.y};}
20     point operator - (point b){return (point){x-b.x,y-b.y};}
21     double operator * (point b){return x*b.x+y*b.y;}
22 }a[mxn];
23 double Cross(point a,point b){return a.x*b.y-a.y*b.x;}
24 int ans=0;
25 int n;
26 void solve(point st,point ed){
27     int res=0;
28     for(int i=1;i<=n;i++){
29         if(fabs(Cross(a[i]-st,ed-st))<eps && ((a[i]-st)*(a[i]-ed)<=0))res++;
30     }
31     ans=max(ans,res);
32 }
33 int main(){
34     freopen("asm_fuel.in","r",stdin);
35     freopen("asm_fuel.out","w",stdout);
36     int i,j;
37     scanf("%d",&n);
38     for(i=1;i<=n;i++)
39         scanf("%lf%lf",&a[i].x,&a[i].y);
40     for(i=1;i<=n;i++){
41         for(j=1;j<=n;j++){
42             if(i==j)continue;
43             solve(a[i],a[j]);
44         }
45     }
46     cout<<ans<<endl;
47     return 0;
48 }