CCF认证——线性分类器(java)

tech2022-10-23  111

CCF认证——线性分类器(java)

import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * 1. 判断哪些点在直线的同一边:将该点的横坐标x带入直线方程,若求得的y * 大于该点的纵坐标,则满足这个条件的所有的点在直线的下方,否则在 * 直线的上方 */ public class Main { public static void main(String[] args) { // write your code here Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); boolean flag = true; boolean flag1 = true; //暂时保存信息集1 List<String> list = new ArrayList<>(); //暂时保存信息集2 List<String> list1 = new ArrayList<>(); double k = 0; String[] str = new String[n]; int[][] nums = new int[n][2]; int[][] num = new int[m][3]; for (int i = 0; i < n; i++) { nums[i][0] = scanner.nextInt(); nums[i][1] = scanner.nextInt(); str[i] = scanner.next(); } for (int i = 0; i < m; i++) { num[i][0] = scanner.nextInt(); num[i][1] = scanner.nextInt(); num[i][2] = scanner.nextInt(); } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { k = -(num[i][0]+num[i][1]*nums[j][0])/(double)num[i][2]; //将点根据在直线的哪一边分类 if ((k-nums[j][1])>1e-6) list.add(str[j]); if (nums[j][1]-k>1e-6) list1.add(str[j]); } for (int j = 0; j < list.size(); j++) { if (!list.get(j).equals(list.get(0))){ flag = false; break; } } for (int j = 0; j < list1.size(); j++) { if (!list1.get(j).equals(list1.get(0))){ flag1 = false; break; } } if (flag == false||flag1 == false) System.out.println("No"); else System.out.println("Yes"); flag = true; flag1 = true; list.removeAll(list); list1.removeAll(list1); } } }
最新回复(0)