zoukankan      html  css  js  c++  java
  • P1142轰炸

    这是uva上的一道模拟题。

    首先给出n(n<=700)个点的坐标(坐标在1*10^9)之内,询问走直线可以经过的点数。一开始我想到了一个类似于桶排序的方法来存坐标,但是要注意数组大小啊!第二次想到了判断行,列,对角线的方法,然后这是错误的,因为直线不一定是对角线。而正确,的方法应该是先计算两个点的向量,再继续枚举与第一个点相连的点组成的向量,计算vx1*vy2==vx2*vy1即可,然后更新最大值。

    1.别僵化思维,老是联系原来的题而忽略如今的题意

    2.注意看题目数据范围决定算法

    3.防止出现精度问题,尽量避免除法

    代码

    #include<cstdio>
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxn 705
    using namespace std;
    int n,K,d;
    struct node{
        int x;
        int y;
    }a[maxn];
    int ans=0;
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            int x,y;
            cin>>a[i].x>>a[i].y;
            
        }
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                if(i==j) continue;
                int cnt=2;
                int vx=a[i].x-a[j].x;
                int vy=a[i].y-a[j].y;
                for(int k=1;k<=n;k++){
                    if(k==i||k==j) continue;
                    int vx_=a[i].x-a[k].x;
                    int vy_=a[i].y-a[k].y;
                    if(vx*vy_==vy*vx_){
                        cnt++;
                    }    
                }
                if(cnt>ans) ans=cnt;    
            }
        }
        cout<<ans;    
        return 0;
    } 
  • 相关阅读:
    多态
    抽象类和接口
    面向对象3
    类的继承 设计模式
    面向对象2
    面向对象
    复习
    对json的简单认识
    关于AJAX
    PHP配置开发环境
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11662968.html
Copyright © 2011-2022 走看看