CSP记录,202006-1线性分类器

代码实现检查点集是否被直线按照A和B类型完美分割,注意输出格式要求大写字母首字母正确。
摘要由CSDN通过智能技术生成

思路:点能够完美被分开,直线的分布情况只有两种:上方是A,下方是B;或者下方是A,上方是B,因此计算sumA,sumB的数量,只有二者之和等于n,或者等于0时才是被完美的分隔了。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,m;    
bool arr[21];    
typedef struct Point{
    int x,y;
    char type;
    int c,a,b;
}point;
int main()
{
    cin>>n>>m;
    point p[1001];
    memset(arr,false,sizeof(arr));
    for(int i=0;i<n;i++){
        cin>>p[i].x>>p[i].y>>p[i].type;//输入点的信息 
    }
    for(int i=0;i<m;i++){
         int sumA=0,sumB=0;
        cin>>p[i].c>>p[i].a>>p[i].b;//输入直线的信息 
        for(int j=0;j<n;j++){
            if(p[i].c+p[i].a*p[j].x+p[i].b*p[j].y>0&&p[j].type=='A'){//A点在直线上面
             sumA++;
             }
             if(p[i].c+p[i].a*p[j].x+p[i].b*p[j].y<0&&p[j].type=='B'){//B点在直线下面 
             sumB++;
             }
         }
         if(sumA+sumB==n||sumA+sumB==0){
             arr[i]=true;
         }
   }
   for(int i=0;i<m;i++){
       if(arr[i]==true){
           cout<<"Yes"<<endl;
       }
       else{
           cout<<"No"<<endl;
       }
   }
    return 0;
}

离谱!!!需要注意的是正确的测试用例输出Yes,只有第一个Y大写;No也是只有N大写。我之前一直输出的是YES,NO,改错改了一个小时,发现是输出问题!

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值