【模拟】轰炸
题目:轰炸 rqnoj150
题目描述
“我该怎么办?”飞行员klux向你求助。
事实上,klux面对的是一个很简单的问题,但是他实在太菜了。
klux要想轰炸某个区域内的一些地方,它们是位于平面上的一些点,但是(显然地)klux遇到了抵抗,所以klux只能飞一次,而且由于飞机比较破,一点起飞就只能沿直线飞行,无法转弯。现在他想一次轰炸最多的地方。
输入格式
输入数据由n对整数组成(1<n<700),每对整数表示一个点的坐标。没有一个点会出现两次。
输出格式
一个整数,表示一条直线能覆盖的最多的点数。
样例输入
样例输出
应该是数学问题,找两个点算出直线方程,然后再判断即可,注意避免除法!!!
C++ Code
#include<cstdio>
#define MAXN 710
typedef struct{int a,b,c;}tnode;
int x[MAXN],y[MAXN],n;
void read()
{
     freopen("rqn150.in","r",stdin);
     freopen("rqn150.out","w",stdout);
     scanf("%d",&n);
     for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
}
void work()
{
     int i,j,k,sum,max=0;
     int a,b,c;
     for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
        {
            sum=0;
            a=y[j]-y[i];
            b=x[i]-x[j];
            c=b*y[i]+a*x[i];
            for(k=1;k<=n;k++)
                if(a*x[k]+b*y[k]==c)sum++;
            max>?=sum;
        }
     printf("%d",max);
}
int main()
{
     read();
     work();
     return 0;
}

    ..... 转载请注明出处 ..... http://oijzh.cnblogs.com ..... by jiangzh
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号