CCF-2020-06-01线性分类器

it2026-06-14  6

(一)题目描述:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201022180620579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aH ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201022180644125.png?x-o (二)题目分析: 能够读懂本题让我们做什么是非常重要的,要求即n个点分成A B两类,所有A类在线的一侧,所有B类点在线的另一侧。转化成当A时,带入直线值全部大于0或者全部小于0;同理,当B时,带入直线值全部大于0或者小于0; (三)c++代码验证:

#include<bits/stdc++.h> using namespace std; struct Dian //设置一个点数结构体 { int x; //点数的横坐标 int y;//点数的纵坐标 char ch;//点数的类别 } ; int main() { int n,m; cin>>n>>m; Dian dian[n]; int i=0; for(i=0;i<n;i++) { cin>>dian[i].x>>dian[i].y>>dian[i].ch; } int Q0,Q1,Q2; //直线的三要素 int j; for(j=0;j<m;j++) { int a0=0,a1=0,b0=0,b1=0; cin>>Q0>>Q1>>Q2; for(i=0;i<n;i++) { if(dian[i].ch=='A') { if(Q0+Q1*dian[i].x+Q2*dian[i].y>0) { a0++; // cout<<"a0:"<<a0<<endl; } else { a1++; // cout<<"a1:"<<a1<<endl; } } else if(dian[i].ch=='B') { if(Q0+Q1*dian[i].x+Q2*dian[i].y>0) { b0++; // cout<<"b0:"<<b0<<endl; } else { b1++; // cout<<"b1:"<<b1<<endl; } } } if(((a0+b1==n)&&a1==0&&b0==0)||((a1+b0==n)&&a0==0&&b1==0)) { // cout<<"a0+b1="<<a0+b1<<"\n"<<"a1+b0="<<a1+b0<<endl; cout<<"Yes"<<endl; } else { //cout<<"a0+b1="<<a0+b1<<"\n"<<"a1+b0="<<a1+b0<<endl; cout<<"No"<<endl; } } return 0; }

(四)结果验证 在CCF官网提交,满分。

最新回复(0)