From 7b021298ff311dff35418e88e5bfd9b619951a6a Mon Sep 17 00:00:00 2001 From: SjxSubham Date: Tue, 28 Oct 2025 00:31:44 +0530 Subject: [PATCH] Implement dominoes push simulation --- 838. Push Dominoes.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 838. Push Dominoes.cpp diff --git a/838. Push Dominoes.cpp b/838. Push Dominoes.cpp new file mode 100644 index 0000000..02a8389 --- /dev/null +++ b/838. Push Dominoes.cpp @@ -0,0 +1,36 @@ +class Solution { +public: + string pushDominoes(string dominoes) { + int n = dominoes.size(); + vector left(n, 0), right(n, 0); + + // Step 1: Propagate rightward forces + int force = 0; + for (int i = 0; i < n; i++) { + if (dominoes[i] == 'R') force = n; // reset strong rightward force + else if (dominoes[i] == 'L') force = 0; // leftward push blocks rightward + else force = max(force - 1, 0); // decrease over distance + right[i] = force; + } + + // Step 2: Propagate leftward forces + force = 0; + for (int i = n - 1; i >= 0; i--) { + if (dominoes[i] == 'L') force = n; // reset strong leftward force + else if (dominoes[i] == 'R') force = 0; // rightward push blocks leftward + else force = max(force - 1, 0); // decrease over distance + left[i] = force; + } + + // Step 3: Determine final state + string result; + for (int i = 0; i < n; i++) { + if (left[i] == right[i]) result += '.'; + else if (left[i] > right[i]) result += 'L'; + else result += 'R'; + } + + return result; + } +}; +