結果
| 問題 | No.2564 衝突予測 | 
| コンテスト | |
| ユーザー |  hatsuka_iwa | 
| 提出日時 | 2023-12-08 04:09:11 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 477 ms / 2,000 ms | 
| コード長 | 2,209 bytes | 
| コンパイル時間 | 1,880 ms | 
| コンパイル使用メモリ | 193,956 KB | 
| 最終ジャッジ日時 | 2025-02-18 09:24:02 | 
| ジャッジサーバーID (参考情報) | judge2 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 9 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
  int T; cin >> T;
  //y1を上方向に
  auto check_ud = [&](int x1, int y1, int x2, int y2) {
    //y方向がy2より大きいとダメ
    if (y1 > y2 || x1 != x2) return false;
    //d2が下方向でxが違うとダメ
    //if (x1 != x2) return false;
    return true;
  };
  //x1を右方向に
  auto check_lr = [&](int x1, int y1, int x2, int y2) {
    //x方向がx2より大きいとダメ
    if (x1 > x2 || y1 != y2) return false;
    //d2が下方向でxが違うとダメ
    //if (d2 == 'D' && x1 != x2) return false;
    return true;
  };
  auto check_ulr = [&](int x1, int y1, int x2, int y2, char d2) {
    if (y1 > y2) return false;
    int diff = y2 - y1;
    if (d2 == 'L' && x1 != x2 - diff) return false;
    if (d2 == 'R' && x1 != x2 + diff) return false;
    return true;
  };
  auto check_dlr = [&](int x1, int y1, int x2, int y2, char d2) {
    if (y1 < y2) return false;
    int diff = y1 - y2;
    if (d2 == 'L' && x1 != x2 - diff) return false;
    if (d2 == 'R' && x1 != x2 + diff) return false;
    return true;
  };
  
  auto f = [&]() {
    int x1, y1, x2, y2;
    char d1, d2; cin >> x1 >> y1 >> d1 >> x2 >> y2 >> d2;
    //方向が同じだとダメ
    if (d1 == d2) return false;
    //d1が上方向
    if (d1 == 'U') {
      if (d2 == 'D') return check_ud(x1, y1, x2, y2);
      if (d2 == 'L') return check_ulr(x1, y1, x2, y2, d2);
      if (d2 == 'R') return check_ulr(x1, y1, x2, y2, d2);
    }
    if (d1 == 'D') {
      if (d2 == 'U') return check_ud(x2, y2, x1, y1);
      if (d2 == 'L') return check_dlr(x1, y1, x2, y2, d2);
      if (d2 == 'R') return check_dlr(x1, y1, x2, y2, d2);
    }
    if (d1 == 'R') {
      if (d2 == 'L') return check_lr(x1, y1, x2, y2);
      if (d2 == 'U') return check_ulr(x2, y2, x1, y1, d1);
      if (d2 == 'D') return check_dlr(x2, y2, x1, y1, d1);
    }
    if (d1 == 'L') {
      if (d2 == 'R') return check_lr(x2, y2, x1, y1);
      if (d2 == 'U') return check_ulr(x2, y2, x1, y1, d1);
      if (d2 == 'D') return check_dlr(x2, y2, x1, y1, d1);
    }
    
    return true;
  };
  for (int i = 0; i < T; i++)
    cout << (f() ? "Yes" : "No") << endl;
}
            
            
            
        