CSP-CCF 202006-1 线性分类器 满分代码

作者:its_ycm 
来源:CSDN 
原文:https://blog.csdn.net/its_ycm/article/details/110004491 
版权声明:本文为博主原创文章,转载请附上博文链接!

问题描述
试题编号: 202006-1
试题名称: 线性分类器
时间限制: 1.0s
内存限制: 512.0MB
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
样例输入

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

用结构体数组的解法,代码如下

#include<bits/stdc++.h>
using namespace std;

struct node{
	int x,y,s;
	char ch;
}nod[1000];

int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;++i){
		cin>>nod[i].x>>nod[i].y>>nod[i].ch;
	}
	
	int a,b,c,f;
	for(int j=0;j<m;++j){
		cin>>a>>b>>c;
		
		for(int i=0;i<n;++i){
			nod[i].s = (a+b*nod[i].x+c*nod[i].y)>0?-1:1;
			
			if(i!=0){
				if((nod[i].ch==nod[0].ch)&&(nod[i].s*nod[0].s)>0)
					f = 1;
				else if((nod[i].ch!=nod[0].ch)&&(nod[i].s*nod[0].s)<0)
					f = 1;
				else{
					f = 0;
					break;
				}
					
			}
		}
		if(f)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}	
	return 0;
}

大数相乘注意取值范围!!!!!下面的代码把代入直线方程后的结果保存到s了。所以要用long long型。

#include<bits/stdc++.h>
using namespace std;

struct node{
	int x,y;
	long long s;//!!!!!!!!!!!!!!!
	char ch;
}nod[1000];

int f[20]; 

int main()
{
	int n,m,a,b,c;
	cin>>n>>m;
	for(int i=0;i<n;++i)
		cin>>nod[i].x>>nod[i].y>>nod[i].ch;
	
	for(int j=0;j<m;++j){
		
		cin>>a>>b>>c;
		
		for(int i=0;i<n;++i){
			
			nod[i].s = a + b*nod[i].x + c*nod[i].y;
			
			if(i!=0){
				if( (nod[i].ch==nod[0].ch) && ((nod[i].s*nod[0].s)>0) )
					f[j]=1;
				else if( (nod[i].ch!=nod[0].ch) && ((nod[i].s*nod[0].s)<0) )
						f[j]=1;
				else{
					f[j]=-1;
					break;
				}					
			}	
						
		}	
		
	}
	
	for(int i=0;i<m;++i){
		if(f[i]==1)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
		
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值