結果

問題 No.760 Where am I moved to?
ユーザー uwi
提出日時 2018-12-08 00:49:27
言語 Java8
(openjdk 1.8.0.191)
結果
AC  
実行時間 138 ms
コード長 3,834 Byte
コンパイル時間 5,734 ms
使用メモリ 25,020 KB
最終ジャッジ日時 2018-12-08 00:49:37

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
1a AC 116 ms
22,452 KB
1b AC 111 ms
25,012 KB
1c AC 111 ms
24,548 KB
2a AC 111 ms
24,984 KB
2b AC 115 ms
22,868 KB
2c AC 112 ms
24,132 KB
2d AC 113 ms
23,248 KB
2e AC 113 ms
22,508 KB
99_system_test1.txt AC 117 ms
25,020 KB
99_system_test2.txt AC 138 ms
24,216 KB
99_system_test3.txt AC 112 ms
24,332 KB
テストケース一括ダウンロード

ソースコード

diff #
package adv2018;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;

public class Day8 {
	InputStream is;
	PrintWriter out;
	String INPUT = "";
	
	void solve()
	{
		double xa = nd(), ya = nd(), ta = nd()*Math.PI/180;
		double x11 = nd(), y11 = nd();
		double x12 = nd(), y12 = nd();
		double x21 = nd(), y21 = nd();
		double x22 = nd(), y22 = nd();
		
		// R(-a)(x11-xa) = (rx11)
		//      (y11-xa)   (ry11)
		
		// R(-a)(x11-xa) = R(-b)(rx21)
		//      (y11-xa)        (ry21)
		
		// R(-a)(x21-xa) = R(-b)(x11-xb)
		//      (y21-ya)        (y11-yb)
		
		// (1,0)
		// (0,-1)
		
		double t1 = Math.atan2(y12-y11, x12-x11);
		double t2 = Math.atan2(y22-y21, x22-x21);
		double tb = ta-(t2-t1);
		
		double bb = tb * 180/Math.PI;
		bb %= 360;
		if(bb < 0)bb += 360;
		
		double rrx12 = x11-((x21-xa) * Math.cos(tb-ta) - (y21-ya) * Math.sin(tb-ta));
		double rry12 = y11-((x21-xa) * Math.sin(tb-ta) + (y21-ya) * Math.cos(tb-ta));
		out.printf("%.14f %.14f %.14f\n", rrx12, rry12, bb);
	}
	
	void run() throws Exception
	{
		is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
		out = new PrintWriter(System.out);
		
		long s = System.currentTimeMillis();
		solve();
		out.flush();
		if(!INPUT.isEmpty())tr(System.currentTimeMillis()-s+"ms");
//		Thread t = new Thread(null, null, "~", Runtime.getRuntime().maxMemory()){
//			@Override
//			public void run() {
//				long s = System.currentTimeMillis();
//				solve();
//				out.flush();
//				if(!INPUT.isEmpty())tr(System.currentTimeMillis()-s+"ms");
//			}
//		};
//		t.start();
//		t.join();
	}
	
	public static void main(String[] args) throws Exception { new Day8().run(); }
	
	private byte[] inbuf = new byte[1024];
	public int lenbuf = 0, ptrbuf = 0;
	
	private int readByte()
	{
		if(lenbuf == -1)throw new InputMismatchException();
		if(ptrbuf >= lenbuf){
			ptrbuf = 0;
			try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
			if(lenbuf <= 0)return -1;
		}
		return inbuf[ptrbuf++];
	}
	
	private boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
	private int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }
	
	private double nd() { return Double.parseDouble(ns()); }
	private char nc() { return (char)skip(); }
	
	private String ns()
	{
		int b = skip();
		StringBuilder sb = new StringBuilder();
		while(!(isSpaceChar(b))){ // when nextLine, (isSpaceChar(b) && b != ' ')
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}
	
	private char[] ns(int n)
	{
		char[] buf = new char[n];
		int b = skip(), p = 0;
		while(p < n && !(isSpaceChar(b))){
			buf[p++] = (char)b;
			b = readByte();
		}
		return n == p ? buf : Arrays.copyOf(buf, p);
	}
	
	private int[] na(int n)
	{
		int[] a = new int[n];
		for(int i = 0;i < n;i++)a[i] = ni();
		return a;
	}
	
	private long[] nal(int n)
	{
		long[] a = new long[n];
		for(int i = 0;i < n;i++)a[i] = nl();
		return a;
	}
	
	private char[][] nm(int n, int m) {
		char[][] map = new char[n][];
		for(int i = 0;i < n;i++)map[i] = ns(m);
		return map;
	}
	
	private int[][] nmi(int n, int m) {
		int[][] map = new int[n][];
		for(int i = 0;i < n;i++)map[i] = na(m);
		return map;
	}
	
	private int ni() { return (int)nl(); }
	
	private long nl()
	{
		long num = 0;
		int b;
		boolean minus = false;
		while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
		if(b == '-'){
			minus = true;
			b = readByte();
		}
		
		while(true){
			if(b >= '0' && b <= '9'){
				num = num * 10 + (b - '0');
			}else{
				return minus ? -num : num;
			}
			b = readByte();
		}
	}
	
	private static void tr(Object... o) { System.out.println(Arrays.deepToString(o)); }
}
0