結果

問題 No.55 正方形を描くだけの簡単なお仕事です。
ユーザー tsunabittsunabit
提出日時 2019-12-18 16:30:07
言語 Java21
(openjdk 21)
結果
AC  
実行時間 135 ms / 5,000 ms
コード長 1,657 bytes
コンパイル時間 3,300 ms
コンパイル使用メモリ 80,004 KB
実行使用メモリ 42,596 KB
最終ジャッジ日時 2024-07-06 14:01:24
合計ジャッジ時間 6,643 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 133 ms
42,288 KB
testcase_01 AC 93 ms
40,176 KB
testcase_02 AC 135 ms
42,192 KB
testcase_03 AC 111 ms
41,812 KB
testcase_04 AC 110 ms
41,192 KB
testcase_05 AC 102 ms
41,232 KB
testcase_06 AC 100 ms
41,012 KB
testcase_07 AC 90 ms
40,128 KB
testcase_08 AC 100 ms
41,204 KB
testcase_09 AC 93 ms
40,264 KB
testcase_10 AC 100 ms
41,056 KB
testcase_11 AC 120 ms
42,056 KB
testcase_12 AC 105 ms
41,128 KB
testcase_13 AC 123 ms
42,436 KB
testcase_14 AC 130 ms
42,372 KB
testcase_15 AC 103 ms
41,136 KB
testcase_16 AC 129 ms
42,196 KB
testcase_17 AC 104 ms
41,076 KB
testcase_18 AC 130 ms
42,596 KB
testcase_19 AC 100 ms
41,160 KB
testcase_20 AC 130 ms
41,532 KB
testcase_21 AC 109 ms
40,784 KB
testcase_22 AC 113 ms
40,788 KB
testcase_23 AC 119 ms
40,848 KB
testcase_24 AC 129 ms
42,324 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.*;
import java.io.*;
import java.math.*;

public class No55 {
//	private static Set<String> set = new HashSet<String>();
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] x = new int[3];
		int[] y = new int[3];
		for(int i = 0; i < 3; i++) {
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
//		for(int i = 0; i < 3; i++) {
//			System.out.println("x y = " + x[i] + " , " + y[i]);
//		}
		int x1, y1, x2, y2;
		boolean f = false;
		// 与えられた3点でのなす角を全て確認するため3回ループ
		for(int i = 0; i < 3; i++) {
			// ベクトル成分を考える。x0~x2のうち、x1を中心に考える。
			x1 = x[1] - x[0];
			y1 = y[1] - y[0];
			x2 = x[2] - x[1];
			y2 = y[2] - y[1];
			// ベクトルの内積が0、かつ長さが等しい場合は正方形の対角線でないため、フラグを立ててループを抜ける
			if((x1 * x2 + y1 * y2) == 0 && Math.pow(x1, 2) + Math.pow(y1, 2) == Math.pow(x2, 2) + Math.pow(y2, 2)) {
				f = true;
				break;
			}
			// 中心となる点を変更するため配列を入れ替える
			// 入れ替えるのは2回のみでOK。最後の一回は不要。
			if(i < 2) {
				int tmpx = x[i];
				x[i] = x[i+1];
				x[i+1] = tmpx;
				int tmpy = y[i];
				y[i] = y[i+1];
				y[i+1] = tmpy;
			}
		}
		// 正方形が描ける場合は座標を出力
		if(f) {
			// 正方形の対角線の交点は、対角線の中点
			// (x[0]+x[2])/2 , (y[0]+y[2])/2 = (x[1]+x?)/2 , (y[1]+y?)/2 を展開すると
			System.out.println((x[0]+x[2]-x[1]) + " " + (y[0]+y[2]-y[1]));
		}else {
			System.out.println(-1);
		}
	}
}
0