結果

問題 No.2564 衝突予測
ユーザー k82bk82b
提出日時 2023-12-02 15:34:50
言語 D
(dmd 2.106.1)
結果
TLE  
実行時間 -
コード長 1,582 bytes
コンパイル時間 3,735 ms
コンパイル使用メモリ 173,952 KB
実行使用メモリ 8,960 KB
最終ジャッジ日時 2024-09-26 18:55:43
合計ジャッジ時間 7,667 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
8,832 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 TLE -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

import std, core.bitop;
string[] _R;
void readM(T)(ref T x) { while (_R.empty) { _R = readln.chomp.split; } x = _R.front.to!T; _R.popFront; }
bool chmin(T)(ref T A, T B) { if (A > B) { A = B; return true; } else { return false; } }
bool chmax(T)(ref T A, T B) { if (A < B) { A = B; return true; } else { return false; } }
int lowerBound(T)(T[] A, T x) { int lo = -1, hi = cast(int)(A.length); while (hi - lo > 1) { int mid = lo + hi >> 1; (A[mid] < x ? lo : hi) = mid; } return hi; }
int upperBound(T)(T[] A, T x) { int lo = -1, hi = cast(int)(A.length); while (hi - lo > 1) { int mid = lo + hi >> 1; (A[mid] > x ? hi : lo) = mid; } return hi; }

void main() {
	int TE;
	TE.readM;
	enum dx = [-1, 1, 0, 0];
	enum dy = [0, 0, 1, -1];
	int[256] A;
	A['L'] = 0;
	A['R'] = 1;
	A['U'] = 2;
	A['D'] = 3;
	long f(long x, long X1, long Y1, char D1, long X2, long Y2, char D2) {
		long a = X1, b = Y1, c = X2, d = Y2;
		a += x * dx[A[D1]];
		b += x * dy[A[D1]];
		c += x * dx[A[D2]];
		d += x * dy[A[D2]];
		return abs(a - c) + abs(b - d);
	}
	foreach (_; 0 .. TE) {
		long X1, Y1, X2, Y2;
		char D1, D2;
		X1.readM;
		Y1.readM;
		D1.readM;
		X2.readM;
		Y2.readM;
		D2.readM;
		X1 *= 2;
		Y1 *= 2;
		X2 *= 2;
		Y2 *= 2;
		long lo = 1, hi = 10L ^^ 11;
		while (hi - lo > 2) {
			long mid1 = (lo + lo + hi) / 3;
			long mid2 = (lo + hi + hi) / 3;
			if (f(mid1, X1, Y1, D1, X2 ,Y2, D2) > f(mid2, X1, Y1, D1, X2, Y2, D2)) lo = mid1;
			else hi = mid2;
		}
		bool ans = false;
		foreach (i; lo .. hi + 1) {
			ans = ans || !f(i, X1, Y1, D1, X2, Y2, D2);
		}
		writeln(ans ? "Yes" : "No");
	}
}
0