问题描述:
我的代码:
#include <iostream>
#include <cstring>
/*
测试样例数据
9 3
1 1 A
1 0 A
1 -1 A
2 2 B
2 3 B
0 1 A
3 1 B
1 3 B
2 0 A
0 2 -3
-3 0 2
-3 1 1
*/
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[1001][2],b[21][3]; // a坐标b系数
char c[1001]; //c类别
for(int i = 0;i < n;i++){ //键入坐标+类别
cin>>a[i][0]>>a[i][1]>>c[i];
}
for(int i = 0;i < m;i++){ // 键入系数
cin>>b[i][0]>>b[i][1]>>b[i][2];
}
int p,j;
for(int i = 0;i < m;i++){ //每一套系数下的函数
int flag = b[i][0] + b[i][1] * a[0][0] + b[i][2] * a[0][1];
if((flag > 0 && c[0] == 'A') || (flag < 0 && c[0] == 'B')){ //先用第一个点判断A在线上方还是下方
p = 1; //A在上方
}else{
p = 0; //A在下方
}
for( j = 0;j < n;j++){
if(p)
{
if(!((b[i][0] + b[i][1] * a[j][0] + b[i][2] * a[j][1] > 0 && c[j] == 'A') || (b[i][0] + b[i][1] * a[j][0] + b[i][2] * a[j][1] < 0 && c[j] == 'B')))
{
cout<<"No"<<endl;
break;
}
}
else
{
if(!((b[i][0] + b[i][1] * a[j][0] + b[i][2] * a[j][1] < 0 && c[j] == 'A') || (b[i][0] + b[i][1] * a[j][0] + b[i][2] * a[j][1] > 0 && c[j] == 'B')))
{
cout<<"No"<<endl;
break;
}
}
}
if(j == n){
cout<<"Yes"<<endl;
}
}
return 0;
}
结果: