• 轰炸


    题目描述

    “我该怎么办?”飞行员klux向你求助。

    事实上,klux面对的是一个很简单的问题,但是他实在太菜了。

    klux要想轰炸某个区域内的一些地方,它们是位于平面上的一些点,但是(显然地)klux遇到了抵抗,所以klux只能飞一次,而且由于飞机比较破,一点起飞就只能沿直线飞行,无法转弯。现在他想一次轰炸最多的地方。

    输入输出格式

    输入格式:

    第一行为n

    输入数据由n对整数组成(1<=n<=700),每对整数表示一个点的坐标。没有一个点会出现两次。

    输出格式:

    一个整数,表示一条直线能覆盖的最多的点数。

    输入输出样例

    输入样例#1:
    5
    1 1
    2 2
    3 3
    9 10
    10 11
    
    输出样例#1:
    3
    

    说明

    本题翻译并改编自uva270,数据及解答由uva提供。

    思路:

    暴力枚举。

    一般式:a*x+b*x+c==0,

    ∵a*x[i]+b*y[i]+c=a*x[j]+b*y[j]+c=0;

    ∴a:b=(y[j]-y[i]):(x[i]-x[j]);

    ∴a=y[j]-y[i],b=x[i]-x[j],c=-a*x[i]-b*y[i].

    代码实现:

     1 #include<cstdio>
     2 int n,a,b,c,x[710],y[710],now,ans;
     3 int main(){
     4     scanf("%d",&n);
     5     for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
     6     for(int i=1;i<n;i++)
     7     for(int j=i+1;j<=n;j++){
     8         a=y[j]-y[i];b=x[j]-x[i];c=-a*x[i]+b*y[i];now=0;
     9         for(int k=1;k<=n;k++) if(a*x[k]-b*y[k]+c==0) ++now;
    10         if(now>ans) ans=now;
    11     }
    12     printf("%d
    ",ans);
    13     return 0;
    14 }

    数学不好。

    题目来源:洛谷

  • 相关阅读:
    java中高级软件工程师面试总结
    失败的面试经历
    解决webstorm打开包含node_modules项目卡死问题
    通俗易懂的理解javascript闭包
    javascript实现silverlight pivotViewer控件
    javascript面向对象
    吐槽一下万网空间
    html5的Canvas
    前端CSS兼容的一些思路
    Win10 Ubuntu子系统访问Windows目录
  • 原文地址:https://www.cnblogs.com/J-william/p/6295779.html
Copyright © 2020-2023  润新知