ccf--线性分类器(100分)简单易懂

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试数据

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 "iostream"
#include "cstdio"
using namespace std;
typedef  long long ll ;
struct point{
    ll x;
    ll y;
}a[1005],b[1005];
ll n,m;
ll Tmp;

bool solve(ll n0,ll n1,ll n2,ll cnt ,ll cot){
    bool flag;
    ll f=0;
    for (int i=1;i<=cnt-1;i++){
        f= n0+n1*a[i].x+n2*a[i].y;
        if(i==1){
            Tmp=f;
            continue;
        }
        if(f*Tmp<0){
            return false ;
        }
    }
    for (int i=1;i<=cot-1;i++){
        f= n0+n1*b[i].x+n2*b[i].y;
        if(f*Tmp>0){
            return false;
        }
    }
   return true;
}
int main(){
    cin>>n>>m;
    ll px,py,pt;
    ll cnt=0;
    ll cot=0;
    for (int i=1;i<=n;i++){
        scanf("%lld %lld %c",&px,&py,&pt);

        if(pt=='A'){
            cnt++;
            a[cnt].x=px;
            a[cnt].y=py;
        }
        else{
            cot++;
            b[cot].x=px;
            b[cot].y=py;
        }
    }
    ll n0,n1,n2;
    bool any[1000]={false};
    for (int i=1;i<=m;i++ ){
        cin>>n0>>n1>>n2;
        any[i]=solve(n0,n1,n2,cnt,cot);
    }
    for (int i=1;i<=m;i++){
        if(any[i])
            printf("Yes\n");
        else
            printf("No\n");
    }
}

相关思路

这个逻辑是简单的,就是将点按照AB分成两组,然后随便选一组的第一个,然后开始对比,出现错误就溜,判断对则要确保你溜不掉。
这个程序真是调的我服了,我真的要吐了,我一度怀疑我是个傻子,怀疑我是不是逻辑错了。结果没有就是代码写的不熟练,调程序调少了,too young too simple ,之后多敲多积累吧。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值