202006-1 线性分类器
简单题:
唯一需要注意的就是我们不能只判断一种点,需要两种点都进行判断,否则会出现A点在一侧,B点在两侧的情况
/*线性分类器*/ #include<bits/stdc++.h> #include<vector> using namespace std; struct node { int x,y; }; vector<node> A; vector<node> B; bool just(int a,int b,int c) { int line=a*A[0].x+b*A[0].y+c; if(line>0){ for(int i=0;i<A.size();i++){ int temp=a*A[i].x+b*A[i].y+c; if(temp<0){ return false; } } for(int i=0;i<B.size();i++){ int temp=a*B[i].x+b*B[i].y+c; if(temp>0){ return false; } } } if(line<0){ for(int i=0;i<A.size();i++){ int temp=a*A[i].x+b*A[i].y+c; if(temp>0){ return false; } } for(int i=0;i<B.size();i++){ int temp=a*B[i].x+b*B[i].y+c; if(temp<0){ return false; } } } return true; } int main() { int n,m; cin>>n>>m; for(int i=0;i<n;i++){ node temp; char c; cin>>temp.x>>temp.y>>c; if(c=='A'){ A.push_back(temp); } else{ B.push_back(temp); } } for (int i = 0; i < m; i++){ int a,b,c; cin>>c>>a>>b; if(just(a,b,c)){ cout<<"Yes"<<endl; } else{ cout<<"No"<<endl; } } }

浙公网安备 33010602011771号