ABC243 C - Collision 2

atcoder.jp

愚直に解こうとすると時間内に処理を終えることができずTLEになるので、
Yをキーとした、
Lの中で一番Xが大きいもの(left_max)、Rの中で一番Xが小さいもの(right_min)のみで、
解けば実行時間の制限にひっかかることなく処理を終えれます

あとは、どんな時にYesとなるか条件を書けば無事ACです
and 以降を忘れると、
X = 1, 2, 3, 4 Y = 1, 1, 1, 1 S = LLRR
こんな時にもYesを出力しちゃうので、忘れないように

解答

N = int(input())
X,Y = [],[]
for _ in range(N):
    x,y = map(int,input().split())
    X.append(x)
    Y.append(y)
S = input()

left_max, right_min = dict(),dict()
for i in range(N):
    if S[i] == 'R':
        if Y[i] in right_min:
            right_min[Y[i]] = min(X[i], right_min[Y[i]])
        else:
            right_min[Y[i]] = X[i]
    else:
        if Y[i] in left_max:
            left_max[Y[i]] = max(X[i], left_max[Y[i]])
        else:
            left_max[Y[i]] = X[i]

    if S[i] == 'R':
        if Y[i] in left_max and right_min[Y[i]] < left_max[Y[i]]:
            print('Yes')
            exit()
    else:
        if Y[i] in right_min and right_min[Y[i]] < left_max[Y[i]]:
            print('Yes')
            exit()

print('No')