#include<iostream>#include<string>usingnamespace std;int a, b, c, n,m;structinfo{int x;int y;bool id;//true为A;false为B}p[1001];boolcalc(int x){return(a + b * p[x].x + c * p[x].y)>0;}booltest(){bool flag = p[0].id ^calc(0);//存放第一个点的位置信息for(int i =1; i < n; i++)if(flag ==(calc(i)^ p[i].id))continue;elsereturnfalse;returntrue;}intmain(){
cin >> n >> m;for(int i =0; i < n; i++){
string id;
cin >> p[i].x >> p[i].y >> id;
p[i].id = id =="A"?true:false;}for(int i =0; i < m; i++){
cin >> a >> b >> c;
cout <<(test()==true?"Yes":"No");if(i != m -1)
cout << endl;}return0;}
题目链接一。将一个代入直线方程后结果大于零或小于零表示该点位于直线的上侧还是下侧二。我是以第一个点为基准。第一个点的位置信息可以将其类型和位置信息用异或存放起来。这样可以少写很多代码。嘿嘿写出的代码还是挺漂亮的#include <iostream>#include<string>using namespace std;int a, b, c, n,m;struct info { int x; int y; bool id;//true为A;false为B}p