CCF模拟题 :202006-1 线性分类器

CCF模拟题 :202006-1 线性分类器

**思路:**1.将输入按照点和分类线分别创建两个结构体或者类也行。
2.点与线的位置有在线上和线下两种情况,对于一条线,第一个点坐标带入线表达式如果结果大于等于0,那么在线上侧,则判断与第一个点类别相同的点是否存在带入先表达式小于0(在线下)那么这条线就不能正确分类,将线属性设置为false;如果与第一个点类相同的点都在线上,那么判断与第一个点类别不相同的点是否在线上如果在,那么这条线不能正确分类,将线属性设置为false。第一个点在线下与上述情况相反判断即可。
3.根据第二步的判断输出结果。

我的错误: 输入时把点的数量n,线的数量m的值改变了导致后来遍历迭代器的时候无法正确进入循环,因为经过输入循环m=n=0哈哈哈哈哈我是个憨憨!!!!后面我竟然还在用m,n!我好憨哦!!!我貌似经常这样憨!~气死!!
代码如下:

#include<iostream>
#include<vector>
using namespace std;
struct point {
	int x;
	int y;
	char ch;
};
struct line {
	int a0;
	int a1;
	int a2;
	bool flag;
};
int main()
{
	int n, m;
	cin >> n >> m;
	int n0, m0;
	n0 = n;
	m0 = m;
	vector<point> p;
	while (n0--)
	{
		point p0;
		int x0, y0;
		char ch0;
		cin >> x0 >> y0 >> ch0;
		p0.x = x0;
		p0.y = y0;
		p0.ch = ch0;
		p.push_back(p0);
	}
	vector<line> l;
	while (m0--)
	{
		line l0;
		int a00, a11, a22;
		cin >> a00 >> a11 >> a22;
		l0.a0 = a00;
		l0.a1 = a11;
		l0.a2 = a22;
		l0.flag = true;
		l.push_back(l0);
	}
	char a;
	for (int j = 0; j < m; j++)
	{
		if (l[j].a0 + l[j].a1*p[0].x + l[j].a2*p[0].y >= 0)
		{
			a = p[0].ch;
			for (int i = 0; i < n; i++)
			{
				if (l[j].a0 + l[j].a1*p[i].x + l[j].a2*p[i].y < 0 && p[i].ch == a)
				{
					l[j].flag = false;
					break;
				}
				if (p[i].ch != a && l[j].a0 + l[j].a1*p[i].x + l[j].a2*p[i].y >= 0)
				{
					l[j].flag = false;
					break;
				}
			}
		}
		else {
			a = p[0].ch;
			for (int i = 0; i < n; i++)
			{
				if (l[j].a0 + l[j].a1*p[i].x + l[j].a2*p[i].y >= 0 && p[i].ch == a)
				{
					l[j].flag = false;
					break;
				}
				if (p[i].ch != a && l[j].a0 + l[j].a1*p[i].x + l[j].a2*p[i].y < 0)
				{
					l[j].flag = false;
					break;
				}
			}
		}
	}
	for (int j = 0; j < m; j++)
	{
		if (l[j].flag)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}

记录一下菜鸡的憨憨历程~加油哇,做个稳重不憨憨的大人哇!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值