CodeForces - 499 C Crazy Town (几何+思维)

题目链接: 点击打开链接
题意:笛卡尔坐标系上有n条直线,已知a,b的坐标,问从a抵达b需要经过几块(块之间经过的前提是相邻的)。保证点不在交点,交线上。
题解:对于每条直线来说,若起始位置和终点在不同侧的话,就意味着他们之间需要跨越一个方块。

换一种说法就是,他们之间有几条线就有个几个方格需要跨越。
实现起来很简单。

#include<bits/stdc++.h>
using namespace std;

//笛卡尔坐标系上有n条直线,
//已知a,b的坐标,
//问从a抵达b需要经过几块(块之间经过的前提是相邻的)。
//保证点不在交点,交线上。
typedef long long ll;
int main(void)
{
    ll x1,y1;
    ll x2,y2;
    cin >> x1 >> y1 >>x2 >> y2;
    ll n;
    cin >> n;
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        ll a,b,c;
        scanf("%lld%lld%lld",&a,&b,&c);
        if( ((a*x1+b*y1+c) >0 && (a*x2+b*y2+c) <0)   || ((a*x1+b*y1+c) <0 && (a*x2+b*y2+c) >0))
            ans ++;
    }
    cout << ans << endl;
}

猜你喜欢

转载自blog.csdn.net/pk__pk/article/details/80446406