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 }
相關文章
相關標籤/搜索