Editorial for Photoshoot
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Approach
Look at the lineup in pairs: positions ,
, and so on. Reversing an
even-length prefix never breaks a pair apart; it only reverses the order of the
pairs inside the chosen prefix, and each mixed pair flips between
GH and HG.
Pairs GG and HH are irrelevant, because they contribute the same number of
Guernseys in even positions no matter how many times they are flipped. So only
mixed pairs matter:
HGis already good, because its even position containsG.GHis bad, because its even position containsH.
Process the pairs from right to left. Suppose we already know how many prefix
reversals must affect the suffix to the right. If that count is even, the
current mixed pair keeps its type; if it is odd, GH and HG swap roles. That
means:
- when the current pair is
GH, we need one more reversal exactly when the current parity is even; - when the current pair is
HG, we need one more reversal exactly when the current parity is odd.
Pairs with identical letters are skipped. This greedy scan is exactly the
official solution.
Solution (Python)
n = int(input())
s = input().strip()
flips = 0
for i in range(n - 2, -1, -2):
pair = s[i : i + 2]
if pair[0] == pair[1]:
continue
if (pair == "GH" and flips % 2 == 0) or (pair == "HG" and flips % 2 == 1):
flips += 1
print(flips)
Comments