hihoCoder题目AC #1040 : 矩形判断 Java
2016-03-15 22:54
477 查看
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = 0; ArrayList<Long> list = new ArrayList<>(); ArrayList<Boolean> resultList = new ArrayList<>(); count = in.nextInt(); int size = count * 16 - 1; while (size >= 0) { list.add(in.nextLong()); size--; } // 判断是否为矩形,只需判断四个角是否为直角 和是否为封闭形状 for (int index = 0; index < count; index++) { ArrayList<Long> tempList = new ArrayList<>(); for (int subIndex = 0; subIndex < 16; subIndex++) { tempList.add(list.get(index * 16 + subIndex)); } if (isClosed(tempList)) { // 判断直角 if (is90(tempList)) { resultList.add(true); } else { resultList.add(false); } } else { resultList.add(false); } } for (Boolean result : resultList) { if (result) { System.out.println("YES"); } else { System.out.println("NO"); } } } public static boolean isClosed(ArrayList<Long> list) { boolean result = true; ArrayList<TPoint> pointList = new ArrayList<>(); for (int index = 0; index < 8; index++) { pointList.add(new TPoint(list.get(index * 2), list.get(index * 2 + 1))); } for (TPoint point : pointList) { int findCount = 0; for (int index = 0; index < 8; index++) { if (point.toString().equals(pointList.get(index).toString())) { findCount++; } } if (findCount != 2) { result = false; break; } } return result; } public static boolean is90(ArrayList<Long> list) { boolean result = false; ArrayList<Line> lineList = new ArrayList<>(); for (int index = 0; index < 4; index++) { Line line = new Line(list.get(index * 4), list.get(index * 4 + 1), list.get(index * 4 + 2), list.get(index * 4 + 3)); lineList.add(line); } int chuizhiCount = 0; int pingxingCount = 0; for (int index = 1; index < 4; index++) { if (lineList.get(0).y * lineList.get(index).y == -1 * lineList.get(0).x * lineList.get(index).x) { chuizhiCount++; } if (lineList.get(0).y * lineList.get(index).x == lineList.get(0).x * lineList.get(index).y) { pingxingCount++; } } if (pingxingCount == 1 && chuizhiCount == 2) { result = true; } return result; } } class Line { Long x; Long y; Long xABS; Long yABS; Long length2; Line(Long x1, Long y1, Long x2, Long y2) { this.x = x2 - x1; this.y = y2 - y1; this.xABS = Math.abs(x2 - x1); this.yABS = Math.abs(y2 - y1); length2 = (xABS * xABS + yABS * yABS); } public Long getLength() { return length2; } } class TPoint { Long x; Long y; TPoint(long x, long y) { this.x = x; this.y = y; } public String toString() { return "(" + x + "," + y + ")"; } }
相关文章推荐
- JAVA API 被坑备忘录
- 求后缀表达式的值
- Spring常用注解
- Struts2 中 模板驱动ModelDriven
- JavaWeb不用选择结构直接引用资源文件
- Eclipse快捷键Assign to local variable
- Java关键字static、final使用小结
- java学习笔记——多线程
- Java ConcurrentHashMap 源码分析(2)
- Eclipse Maven Project
- Spring中AOP基于Annotation的零配置(2)
- windows下配置java环境变量
- Java中implements和extends的小记
- Eclipse将android项目打包jar文件
- Eclipse常用快捷键汇总(转)
- Java面向对象01-对象和类
- Java基础之自动装箱拆箱
- [疯狂Java]AWT拖放操作:拖放源
- 深入理解JVM(2)—Java虚拟机内存区域
- java web的文件上传