菜歸菜,題還是要做的,準備一下9月份的認證考試
題目連結: 2020-06-1 線性分類器.
code
#include<iostream>
using namespace std;
int main() {
int n, m;
cin >> n;
cin >> m;
int (*points)[2] = new int[n][2];
char *points_flag = new char[n];
int (*lines)[3] = new int[m][3];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2; j++) {
cin >> points[i][j];
}
cin >> points_flag[i];
}
for (int i = 0; i < m; i++)
for (int j = 0; j < 3; j++) {
cin >> lines[i][j];
}
char upch;
string* answer = new string[m];
for (int i = 0; i < m; i++) {
if (lines[i][0] + points[0][0] * lines[i][1] + points[0][1] * lines[i][2] > 0) {
if (points_flag[0] == 'A') {
upch = 'A';
}
else {
upch = 'B';
}
}
else {
if (points_flag[0] == 'A') {
upch = 'B';
}
else {
upch = 'A';
}
} //已擷取目前直線之上的點的标記upch
int j;
for (j = 1; j < n; j++) {
if (lines[i][0] + points[j][0] * lines[i][1] + points[j][1] * lines[i][2] > 0) {
if (points_flag[j] != upch) {
answer[i] = "No";
break;
}
}
else {
if (points_flag[j] == upch) {
answer[i] = "No";
break;
}
}
}
if (j == n) {
answer[i] = "Yes";
}
}
for (int i = 0; i < m; i++)
cout << answer[i] << endl;
return 0;
}