一。将一个点代入直线方程后结果大于零或小于零表示该点位于直线的上侧还是下侧
二。假设该线性分类器成功分类,那么任意取出一个点都可以知道具体的类型分布。我是以第一个点为基准。第一个点的位置信息可以将其类型和位置信息用异或存放起来。这样可以少写很多代码。
C++中的布尔类型直接当成数字进行运算 ,可以。区别于java
嘿嘿写出的代码还是挺漂亮的
#include <iostream>
#include<string>
using namespace std;
int a, b, c, n,m;
struct info {
int x;
int y;
bool id;
}p[1001];
bool calc(int x) {
return (a + b * p[x].x + c * p[x].y) > 0;
}
bool test() {
bool flag = p[0].id ^ calc(0);
for (int i = 1; i < n; i++)
if (flag == (calc(i) ^ p[i].id))
continue;
else return false;
return true;
}
int main() {
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;
}
return 0;
}
|