CCF CSP202006-1 线性分类器

题目来源于CCF CSP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


代码解析

//这道题是简单题
#include<iostream>
using namespace std;
struct Node {
    
    
	int x;
	int y;
	char kind;
}node[1000];
bool Check(int n,int x0,int x1,int x2) {
    
    
	#define result(x,y) (x0 + x * x1 + y * x2)
	char kind_first = 'z', kind_second = 'x';
	for (int i = 0; i < n; ++i) {
    
    
		//恰好在线上,不能区分
		if (result(node[i].x, node[i].y) == 0)
			return false;
		if (result(node[i].x, node[i].y) > 0) {
    
    
			kind_first = node[i].kind;
		}
		else if (result(node[i].x, node[i].y) < 0) {
    
    
			kind_second = node[i].kind;
		}
		if (kind_first == kind_second)
			return false;
	}
	return true;
}
int main()
{
    
    
	int n, m;  //点,查询个数
	int x0, x1, x2;//三个系数(0,1,2)
	cin >> n;
	cin >> m;
	//录入点的信息
	for (int i = 0; i < n; ++i) 
		cin >> node[i].x >> node[i].y >> node[i].kind;
	for (int i = 0; i < m; ++i) {
    
    
		cin >> x0 >> x1 >> x2;
		if (Check(n,x0,x1,x2)) {
    
    
			cout << "Yes" << endl;
		}
		else
			cout << "No" << endl;
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/107550068
今日推荐