要注意的是相乘的时候要注意数的类型,此处用了long long,因为下面两个函数值相乘可能会超出int的范围
#include <iostream>
#include <iomanip>
#include<vector>
using namespace std;
struct point {
int xn, yn;
char c;
};
vector<point>a;
vector<point>b;
int main()
{
int n, m;
cin >> n >> m;
int i = 0, j = 0;
for (i=0; i < n; i++)
{
int x, y;
char c;
point p;
cin >> x >> y >> c;
p.xn = x;
p.yn = y;
if (c == 'A')
a.push_back(p);
if (c == 'B')
b.push_back(p);
}
for (int i = 0; i < m; i++) {
long long cala,calb = 0;
long long temp = 0;
long long a0, a1, a2, sum = 0;
cin >> a0 >> a1 >> a2;
cala = a0 + a1 * a[0].xn + a2 * a[0].yn;
calb = a0 + a1 * b[0].xn + a2 * b[0].yn;
for (int j = 0; j < a.size(); j++) {
temp = a0 + a1 * a[j].xn + a2 * a[j].yn;
if (temp * cala > 0)
sum++;
else
break;
}
for (int k = 0; k < b.size(); k++) {
temp = a0 + a1 * b[k].xn + a2 * b[k].yn;
if (temp * calb > 0)
sum++;
else
break;
}
if(sum == n && cala * calb < 0) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}