結果

問題 No.760 Where am I moved to?
ユーザー uwi
提出日時 2018-12-08 00:49:27
言語 Java8
(openjdk 1.8.0.191)
結果
AC  
実行時間 105 ms
コード長 3,834 Byte
コンパイル時間 4,371 ms
使用メモリ 21,200 KB
最終ジャッジ日時 2019-05-15 16:44:38

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
1a AC 103 ms
21,148 KB
1b AC 103 ms
21,140 KB
1c AC 104 ms
21,152 KB
2a AC 104 ms
21,196 KB
2b AC 103 ms
21,112 KB
2c AC 103 ms
21,184 KB
2d AC 105 ms
21,200 KB
2e AC 102 ms
21,200 KB
99_system_test1.txt AC 103 ms
21,196 KB
99_system_test2.txt AC 104 ms
21,136 KB
99_system_test3.txt AC 103 ms
21,148 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