CCF小白刷题之路---202006-1 线性分类器(C/C++ 100分)

一、题目描述

CCF小白刷题之路---202006-1 线性分类器(C/C++ 100分)_第1张图片
CCF小白刷题之路---202006-1 线性分类器(C/C++ 100分)_第2张图片
CCF小白刷题之路---202006-1 线性分类器(C/C++ 100分)_第3张图片
CCF小白刷题之路---202006-1 线性分类器(C/C++ 100分)_第4张图片

二、代码实现

#include
using namespace std;
//用结构体来表示每一个点
struct Node{
     
    int x;
    int y;
    char type;
};

int main()
{
     
    Node node[1005];
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
     
        cin>>node[i].x>>node[i].y>>node[i].type;
    }
    int theta0,theta1,theta2;
    for(int i=0;i<m;i++)
    {
     
        cin>>theta0>>theta1>>theta2;
        //把点带入直线方程,如果值大于0,则记为1,小于0则记为0,
        //同类型的点带入直线方程应该具有相同的正负性,以此来判断直线是否符合标准
        int a[1005]={
     0};
        int b[1005]={
     0};
        int a_i=0,b_i=0;
        for(int j=0;j<n;j++)
        {
     
            if(node[j].type=='A')
            {
     
                if(theta0 + theta1 * node[j].x + theta2 * node[j].y > 0) a[a_i++] = 1;
                else a[a_i++] = 0;
            }
            else
            {
     
                if(theta0 + theta1 * node[j].x + theta2 * node[j].y > 0) b[b_i++] = 1;
                else b[b_i++] = 0;
            }
        }
        //标志符flag判断直线是否符合标准
        bool flag = true;
        for(int j=0;j<a_i-1;j++)
        {
     
            if(a[j]!=a[j+1])
            {
     
                flag = false;
                break;
            }
            else continue;
        }
        for(int j=0;j<b_i-1;j++)
        {
     
            if(b[j]!=b[j+1])
            {
     
                flag = false;
                break;
            }
            else continue;
        }
        if(flag==true) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

更多CCFCSP认证真题详解,请点击>>CCFCSP历年认证考试真题解答汇总

你可能感兴趣的:(ccf,ccf,算法)