URAL 1052 Rabbit Hunt

URAL_1052

    显然子弹的线路至少会通过两个点,于是我们枚举任意两个点就相当于枚举了所有可能的子弹的线路,这样每次再用叉积算一下有多少个点在直线上即可。

#include<stdio.h>

#include<string.h>

#define MAXD 210

int N, x[MAXD], y[MAXD];

int det(int x1, int y1, int x2, int y2)

{

    return x1 * y2 - x2 * y1;

}

void init()

{

    int i;

    for(i = 0; i < N; i ++)

        scanf("%d%d", &x[i],  &y[i]);

}

void solve()

{

    int i, j, k, ans = 0, t;

    for(i = 0; i < N; i ++)

        for(j = i + 1; j < N; j ++)

        {

            t = 0;

            for(k = 0; k < N; k ++)

                if(det(x[j] - x[i], y[j] - y[i], x[k] - x[i], y[k] - y[i]) == 0)

                    ++ t;

            if(t > ans)

                ans = t;

        }

    printf("%d\n", ans);

}

int main()

{

    while(scanf("%d", &N) == 1)

    {

        init();

        solve();

    }

    return 0;

}

你可能感兴趣的:(bit)