您的位置:首页 > 编程语言 > Java开发

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 + ")";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: