COGS2090 Asm.Def找燃料

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

【题目描述】

 

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

“不要听得风就是雨。”

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

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

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

“无线电焦点,在那能监听到透明计算网络控制的所有卫星。而且是已经去过了,所以我才会在这儿。”Asm.Def回答。

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

“什么?!”

“我们可以去废弃卫星上找燃料。现在就差一个程序员。”

我们把太空看做一个二维平面。有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 }

 

转载于:https://www.cnblogs.com/SilverNebula/p/6675610.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值