結果

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

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
1a AC 112 ms
32,372 KB
1b AC 112 ms
31,984 KB
1c AC 113 ms
32,472 KB
2a AC 112 ms
32,568 KB
2b AC 113 ms
32,108 KB
2c AC 113 ms
30,136 KB
2d AC 115 ms
31,876 KB
2e AC 113 ms
33,944 KB
99_system_test1.txt AC 114 ms
32,748 KB
99_system_test2.txt AC 113 ms
31,880 KB
99_system_test3.txt AC 112 ms
32,744 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