试题编号: | 202006-1 |
---|---|
试题名称: | 线性分类器 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
问题描述:
思路:
把点代入直线中,通过判断正负数区分点处于直线上下方
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();// 点数
int m = input.nextInt();// 直线数量
int counta = 0, countb = 0, flagA = 0, flagB = 0;
int xadata[] = new int[n];// a点X轴数组
int yadata[] = new int[n];// a点y轴数组
int xbdata[] = new int[n];// b点X轴数组
int ybdata[] = new int[n];// b点y轴数组
for (int i = 0; i < n; i++) {
// 输入
int z1 = input.nextInt();
int z2 = input.nextInt();
char z3 = input.next().charAt(0);
// 判断点A or B并存入数组
if (z3 == 'A') {
xadata[counta] = z1;
yadata[counta] = z2;
counta++;
} else if (z3 == 'B') {
xbdata[countb] = z1;
ybdata[countb] = z2;
countb++;
}
}
for (int j = 0; j < m; j++) {
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
for (int f1 = 0; f1 < counta; f1++) {
int flag = a + b * xadata[f1] + c * yadata[f1];
if (flag > 0) {
flagA++;
}
}
for (int f2 = 0; f2 < countb; f2++) {
int flag = a + b * xbdata[f2] + c * ybdata[f2];
if (flag > 0) {
flagB++;
}
}
if (flagA == counta && flagB == 0) {
System.out.println("Yes");
} else if (flagA == 0 && flagB == countb) {
System.out.println("Yes");
} else {
System.out.println("No");
}
// 初始化
flagA = 0;
flagB = 0;
}
input.close();
}
}
原题链接: http://118.190.20.162/view.page?gpid=T105