做题总结:
分类讨论,永远的神
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+1;
int main()
{
int m;
int n;
cin>>n>>m;
struct point
{
int x;
int y;
char type;
};
struct point p[N];
for(int i=0;i<n;i++)
{
cin>>p[i].x>>p[i].y>>p[i].type;
}
struct degree{
int a;
int b;
int c;
};
struct degree d[21];
for(int i=0;i<m;i++)
{
cin>>d[i].a>>d[i].b>>d[i].c;
}
for(int i=0;i<m;i++)
{
int q;
if((d[i].a+d[i].b*p[0].x+d[i].c*p[0].y>0)&&p[0].type == 'A')
{
q=1;
}
if((d[i].a+d[i].b*p[0].x+d[i].c*p[0].y<0)&&p[0].type == 'A')
{
q=2;
}
if((d[i].a+d[i].b*p[0].x+d[i].c*p[0].y>0)&&p[0].type == 'B')
{
q=2;
}
if((d[i].a+d[i].b*p[0].x+d[i].c*p[0].y<0)&&p[0].type == 'B')
{
q=1;
}
bool w = true;
switch(q)
{
case 1:
for(int j=0;j<n;j++)
{
if((p[j].type == 'A'&&(d[i].a+d[i].b*p[j].x+d[i].c*p[j].y>0))||(p[j].type == 'B'&&(d[i].a+d[i].b*p[j].x+d[i].c*p[j].y<0)))
{
continue ;
}
else
{
w = false;
}
}
if(w )
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
break;
case 2:
for(int j=0;j<n;j++)
{
if((p[j].type == 'A'&&(d[i].a+d[i].b*p[j].x+d[i].c*p[j].y<0))||(p[j].type == 'B'&&(d[i].a+d[i].b*p[j].x+d[i].c*p[j].y>0)))
{
continue ;
}
else
{
w = false;
}
}
if(w )
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
break;
default :
cout<<"error"<<endl;
}
}
return 0;
}