#include #include using namespace std; bool check(double a, double b, double c, double d, double p, double q, double r, double s) { if(((b-d)*(p-a) - (a-c)*(q-b)) * ((b-d)*(r-a) - (a-c)*(s-b)) >= 0) { //cout << "@@@@@@@@@@@@@" << endl; return false; } return true; } pair kouten(double a, double b, double c, double d, double p, double q, double r, double s) { if(!check(a,b,c,d,p,q,r,s) || !check(p,q,r,s,a,b,c,d)) { return make_pair(11111,11111); } double A = b-d; double B = c-a; double C = a*A + b*B; double P = q-s; double Q = r-p; double R = p*P + q*Q; double x = (Q*C-B*R)/(A*Q-B*P); double y = (Q*R-P*C)/(A*Q-B*P); return make_pair(x,y); } int main() { int loop; cin >> loop; while(loop--) { double sx, sy, gx, gy; int N; cin >> sx >> sy >> gx >> gy; //cout << sx << " " << sy << " " << gx << " " << gy << endl; cin >> N; vector, int> > vec; for(int i = 0; i < N; i++) { double a,b,c,d; int f,g; cin >> a >> b >> c >> d >> f >> g; pair p = kouten(sx,sy,gx,gy,a,b,c,d); if(p.first > 10001) { continue; } vec.push_back(make_pair(p, (f + g) % 2)); } sort(vec.begin(), vec.end()); if(vec.size() == 0) { cout << 0 << endl; continue; } int prev = vec[0].second; int cnt = 0; for(int i = 1; i < vec.size(); i++) { if(vec[i].second != prev) { cnt++; prev = vec[i].second; } } cout << cnt << endl; } }