思路:只有当两个点不被任何直线分隔开时,两个点才算在同一区域内。
所以当两个点位于一条直线的两侧时,就需要跨过这条直线,扫描所有的road即可。
代码如下:
#include <cstdio>
using namespace std;
int main(){
int x1, y1, x2, y2;
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
int n;
scanf("%d", &n);
int ans = 0;
for(int i = 0; i < n; ++i){
long long a, b, c;
scanf("%I64d %I64d %I64d", &a, &b, &c);
long long t1 = a * x1 + b * y1 + c;
long long t2 = a * x2 + b * y2 + c;
if((t1 < 0 && t2 > 0) || (t1 > 0 && t2 < 0))
ans ++;
}
printf("%d\n", ans);
return 0;
}