题目来源于CCF CSP
代码解析
//这道题是简单题
#include<iostream>
using namespace std;
struct Node {
int x;
int y;
char kind;
}node[1000];
bool Check(int n,int x0,int x1,int x2) {
#define result(x,y) (x0 + x * x1 + y * x2)
char kind_first = 'z', kind_second = 'x';
for (int i = 0; i < n; ++i) {
//恰好在线上,不能区分
if (result(node[i].x, node[i].y) == 0)
return false;
if (result(node[i].x, node[i].y) > 0) {
kind_first = node[i].kind;
}
else if (result(node[i].x, node[i].y) < 0) {
kind_second = node[i].kind;
}
if (kind_first == kind_second)
return false;
}
return true;
}
int main()
{
int n, m; //点,查询个数
int x0, x1, x2;//三个系数(0,1,2)
cin >> n;
cin >> m;
//录入点的信息
for (int i = 0; i < n; ++i)
cin >> node[i].x >> node[i].y >> node[i].kind;
for (int i = 0; i < m; ++i) {
cin >> x0 >> x1 >> x2;
if (Check(n,x0,x1,x2)) {
cout << "Yes" << endl;
}
else
cout << "No" << endl;
}
}