CCF 线性分类器 202006

在这里插入图片描述

#include<iostream>
using namespace std;

const int MAX_Point = 1000;
const int MAX_Line = 20;
//点 
struct Point{
	int x;//横坐标 
	int y;//纵坐标 
	char type;//类型 
};

//线
struct Line{
	int k0;
	int k1;
	int k2;
}; 

Point p[MAX_Point];
Line l[MAX_Line];

bool above(Point &p,Line &l){
	int y=l.k0+l.k1*p.x+l.k2*p.y;
	if(y>0){
		return true;
	}
	else{
		return false;
	}
}

int main()
{
	int n,m;
	cin>>n>>m;

	for(int i=0;i<n;i++){
		cin>>p[i].x>>p[i].y>>p[i].type;
	}
	for(int i=0;i<m;i++){
		cin>>l[i].k0>>l[i].k1>>l[i].k2;
	}
	for(int i=0;i<m;i++){
		int count_over,count_less;
		count_over=count_less=0;
		char over[MAX_Point];
		char less[MAX_Point];
		for(int j=0;j<n;j++){
			if(above(p[j],l[i])==true){
				over[count_over++]=p[j].type;
			}
			else{
				less[count_less++]=p[j].type;
			}
		}
		bool flag=true;
		for(int j=0;j<count_over;j++){
			if(over[j]!=over[0]){
				flag=false;
			}
		}
		for(int j=0;j<count_less;j++){
			if(less[j]!=less[0]){
				flag=false;
			}
		}
		if(flag==true){
			cout<<"Yes"<<endl;
		}
		else{
			cout<<"No"<<endl;
		}
	}
	return 0;	
} 

数据测试:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Who_Am_I.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值