結果

問題 No.3779 L or R
コンテスト
ユーザー masasu
提出日時 2026-10-30 22:35:18
言語 PyPy3
(8.0.0 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 455 ms / 2,000 ms
+ 974µs
コード長 1,768 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 342 ms
コンパイル使用メモリ 63,860 KB
実行使用メモリ 176,296 KB
最終ジャッジ日時 2026-10-30 22:35:39
合計ジャッジ時間 18,851 ms
ジャッジサーバーID
(参考情報)
judge7_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 40
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

# https://github.com/robe2222555/atcoder-lib/blob/main/template/python/main.py
import sys
input = lambda: sys.stdin.readline().rstrip()
def LI(): return list(map(int, input().split()))
def II(): return int(input())
INF = 1<<60


def solve():
	N = II()
	S = "o"+input()

	if N==1:
		if S[-1]=="x":
			print("Yes")
		else:
			print("No")
		return

	
	T = [int(S[i] != S[i+1]) for i in range(N)]
	# dp := 0が消灯/点灯, i-1が消灯/点灯, iが消灯/点灯
	dp = [[[0]*2 for _ in range(2)] for _ in range(N+1)]
	dp[1][T[0]^1][T[1]^1] = 1
	dp[1][T[0]^1][T[1]] = 1
	prev = [[[-1]*2 for _ in range(2)] for _ in range(N+1)]
	prev[1][T[0]^1][T[1]^1] = 0
	prev[1][T[0]^1][T[1]] = 1


	for idx in range(2, N):
		t = T[idx]
		for i in range(2):
			for j in range(2):
				if not dp[idx-1][i][j]: continue
				#pref
				if j^1 and dp[idx][i^1][t^1]==0:
					dp[idx][i^1][t^1] = 1
					prev[idx][i^1][t^1] = 0
				#suff
				if j and dp[idx][i][t]==0:
					dp[idx][i][t] = 1
					prev[idx][i][t] = 1
		continue

	#idx==N
	#pref
	#pref
	if dp[N-1][1][0]:
		print("Yes")
		ans = ["L"]
		idx,i,j = N-1,1,0

		while prev[idx][i][j]>=0:
			assert idx>=1
			if prev[idx][i][j]==0:
				ans.append("L")
				idx = idx-1
				i = i^1
				j = 0
			else:
				ans.append("R")
				idx = idx-1
				i = i
				j = 1
			continue
		print("".join(ans[::-1]))
		return
	
	if dp[N-1][0][1]:
		print("Yes")
		ans = ["R"]
		idx,i,j = N-1,0,1

		while prev[idx][i][j]>=0:
			assert idx>=1
			if prev[idx][i][j]==0:
				ans.append("L")
				idx = idx-1
				i = i^1
				j = 0
			else:
				ans.append("R")
				idx = idx-1
				i = i
				j = 1
			continue
		print("".join(ans[::-1]))
		return
	print("No")
	return


def main():
	T = 1
	for _ in range(T):
		solve()
	return


if __name__ == '__main__':
	main()
0