链接:http://vjudge.net/contest/143819#problem/F
题意:给你两个点A,B的坐标,你要从A走到B。给几条直线的一般形式的参数ax + by + c 即给定a,b,c。两个块有公共变,则为相邻的块。如果,两个块是相邻的,从一块走到另一块,需要一步。问从A走到B至少需要几步
解析:问需要几步,就是问从A到B需要穿过几条线。
将A,B点的坐标分别带入每条的直线,如果异号,则要穿过该直线,反之不用。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[305],b[305],c[305];
int main()
{
ll x0,y0,x1,y1;
scanf("%I64d%I64d%I64d%I64d",&x0,&y0,&x1,&y1);
int n;
scanf("%d",&n);
for(int i = 0; i < n; i ++)
{
scanf("%I64d%I64d%I64d",&a[i],&b[i],&c[i]);
}
int ans = 0;
//a[i] * x0 * 1ll + b[i] * y0 * 1ll + c * 1ll;
//a[i] * x1 * 1ll + b[i] * y1 * 1ll + c * 1ll;
for(int i = 0; i < n; i ++)
{
if((a[i] * x0 + b[i] * y0 + c[i] ) > 0)
{
if((a[i] * x1 + b[i] * y1 + c[i] ) <0)
{
ans ++;
}
}
else
{
if((a[i] * x1 + b[i] * y1 + c[i] ) >0)
{
ans ++;
}
}
}
printf("%d\n",ans);
return 0;
}