#include <iostream>
#include <vector>
using namespace std;
int getside(int a, int b, int c, pair<int, int>& pr) {
int x = pr.first, y = pr.second;
int res = a + b * x + c * y;
return (res > 0 ? 1 : 2);
}
bool check(int a, int b, int c, vector<pair<int, int> >& A, vector<pair<int, int> >& B) {
int m = A.size(), n = B.size();
int sidea = getside(a, b, c, A[0]);
for (int i = 1; i < m; ++i) {
if (getside(a, b, c, A[i]) != sidea) {
return false;
}
}
for (int i = 0; i < n; ++i) {
if (getside(a, b, c, B[i]) == sidea) {
return false;
}
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
vector<pair<int, int> > A, B;
for (int i = 0; i < n; ++i) {
int x, y;
string s;
cin >> x >> y >> s;
if (s == "A") {
A.push_back(make_pair(x, y));
} else {
B.push_back(make_pair(x, y));
}
}
for (int _ = 0; _ < m; ++_) {
int a, b, c;
cin >> a >> b >> c;
cout << (check(a, b, c, A, B) ? "Yes" : "No") << endl;
}
return 0;
}
附:
1.in
9 3
1 1 A
1 0 A
1 -1 A
2 2 B
2 3 B
0 1 A
3 1 B
1 3 B
2 0 A
0 2 -3
-3 0 2
-3 1 1
1.out
No
No
Yes
本文详细探讨了2020年CCF CSP竞赛中涉及的线性分类器题目,分析了解题思路和关键算法。
640

被折叠的 条评论
为什么被折叠?



