#include<iostream>usingnamespace std;structPoint{int x, y;char type;};structPoint points[10001];intmain(){int n, m;scanf("%d%d",&n,&m);for(int i =0; i < n;++i){scanf("%d%d %c",&points[i].x,&points[i].y,&points[i].type);// 这里%c前面的空格是防止空格被输入}int a, b, c;// ax + by + c = 0for(int j =0; j < m;++j){scanf("%d%d%d",&c,&a,&b);int flag = a * points[0].x + b * points[0].y + c >0?1:0;// 记录第一个点是在线的上方还是下方int type = points[0].type;// 记录和第一个点在同一侧的类型int i =1;for(; i < n;++i){int tflag = a * points[i].x + b * points[i].y + c >0?1:0;if((tflag == flag && points[i].type != type)||(tflag != flag && points[i].type == type)){printf("No\n");break;}}if(i == n){printf("Yes\n");}}return0;}
线性分类器原题链接满分代码如下:#include <iostream>using namespace std;struct Point { int x, y; char type;};struct Point points[10001];int main(){ int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < n; ++i) { scan