1161 - Big Number

From Bitnami MediaWiki
Revision as of 08:53, 28 March 2024 by Cristina94 (talk | contribs) (Pagină nouă: ==Enunţ== Algorel tocmai a avut un interviu la AlgoTech. Fiind isteţ din fire, el a reuşit să rezolve toate problemele, mai puţin una de care nu reuşeşte nicicum să se prindă cum se face. Aflând că la Iaşi are loc Concursul Urmaşii lui Moisil, s-a gândit să propună această problemă şi să ofere 100 de puncte ca recompensă celor care o rezolvă corect. Fie un şir cu N cifre asupra căruia se poate efectua operaţia swap de maxim X ori. Prin swap se înţe...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunţ[edit | edit source]

Algorel tocmai a avut un interviu la AlgoTech. Fiind isteţ din fire, el a reuşit să rezolve toate problemele, mai puţin una de care nu reuşeşte nicicum să se prindă cum se face. Aflând că la Iaşi are loc Concursul Urmaşii lui Moisil, s-a gândit să propună această problemă şi să ofere 100 de puncte ca recompensă celor care o rezolvă corect.

Fie un şir cu N cifre asupra căruia se poate efectua operaţia swap de maxim X ori. Prin swap se înţelege interschimbarea a două elemente din şir aflate pe poziţii vecine.

Cerința[edit | edit source]

Să se determine numărul maxim care se poate obţine din şirul cu N cifre, după efectuarea a maxim X operaţii swap.

Date de intrare[edit | edit source]

Fișierul de intrare bignumber.in conține pe prima linie numerele naturale N şi X separate prin exact un spaţiu, iar pe următoarea linie se află N cifre fără spaţiu.

Date de ieșire[edit | edit source]

Fișierul de ieșire bignumber.out va conține pe prima linie numărul maxim care se poate obţine conform cerinţei din enunţ.

Restricții și precizări[edit | edit source]

  • 1 ≤ N ≤ 1.000.000
  • 0 ≤ X ≤ 1.000.000.000
  • Pentru 30% din teste N ≤ 5.000
  • Pentru alte 20% din teste X ≤ 25.000.000

Exemplu1[edit | edit source]

bignumber.in
5 3
14325
bignumber.out
41532

Exemplu2[edit | edit source]

bignumber.in
1000001 3
12345
bignumber.out
Date invalide.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1161 BigNumber

def maximum_number(N, X, digits):

 result = list(digits)
 for i in range(N):
   max_index = i
   for j in range(i + 1, min(N, i + X + 1)):
     if digits[j] > digits[max_index]:
       max_index = j
   for j in range(max_index, i, -1):
     if X <= 0:
       break
     result[j], result[j - 1] = result[j - 1], result[j]
     X -= 1
 return .join(result)

def is_valid_input(N, X, digits):

 if not (1 <= N <= 1000000):
   return False
 if not (0 <= X <= 1000000000):
   return False
 if len(digits) != N:
   return False
 for digit in digits:
   if not ('0' <= digit <= '9'):
     return False
 return True

def main():

 with open("bignumber.in", "r") as f:
   N, X = map(int, f.readline().split())
   digits = f.readline().strip()
 if not is_valid_input(N, X, digits):
   with open("bignumber.out", "w") as f_out:
       f_out.write("Date invalide.")
 else:
   max_number = maximum_number(N, X, digits)
   with open("bignumber.out", "w") as f_out:
       f_out.write(max_number)

if __name__ == "__main__":

 main()

</syntaxhighlight>