1055 - Compar

From Bitnami MediaWiki

Ana şi Bogdan au inventat jocul “Compar”. Ana scrie pe tablă o secvenţă formată din N numere naturale distincte cuprinse între 1 şi N, apoi compară fiecare două numere învecinate din secvenţă scriind între ele semnul < sau semnul >, după caz.

De exemplu, dacă secvenţa de pe tablă este 6 4 2 1 3 5, după compararea elementelor învecinate şi inserarea semnelor în secvenţă, Ana obţine:

6>4>2>1<3<5

După aceea Ana şterge cele N elemente ale secvenţei şi păstrează numai semnele, astfel:

>>><<

La final, Ana îi arată lui Bogdan şirul semnelor şi îi cere să reconstituie secvenţa de numere naturale scrisă iniţial pe tablă.

Cerinţă[edit | edit source]

Cunoscând şirul semnelor construit de Ana, scrieţi un program care să îl ajute pe Bogdan să reconstituie secvenţa de numere naturale distincte scrisă iniţial pe tablă.

Date de intrare[edit | edit source]

Fișierul de intrare compar.in conține pe prima linie o secvenţă de caractere din mulţimea {'<', '>'}, reprezentând şirul semnelor obţinut de Ana după compararea elementelor vecine din secvenţa iniţială.

Date de ieșire[edit | edit source]

Fișierul de ieșire compar.out va conține pe prima linie numărul natural N, reprezentând lungimea secvenţei iniţiale. Pe a doua linie vor fi scrise N numere naturale distincte cuprinse între 1 şi N, separate prin câte un spaţiu, reprezentând elementele secvenţei iniţiale, reconstituită pe baza semnelor din fişierul de intrare.

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

  • 1 < N ≤ 100000
  • Dacă există mai multe soluţii, afişaţi oricare dintre acestea.
  • Pentru determinarea corectă a lungimii secvenţei se acordă 10% din punctajul pe test.

Exemplu:[edit | edit source]

compar.in

>>><<

compar.out

6
6 4 2 1 3 

Explicație[edit | edit source]

6>4>2>1<3<5

Există şi alte soluţii posibile, aceasta este doar una dintre ele.

Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> import os

s = [ for i in range(100000)]

def main():

   fin = open("compar.intxt", "r")
   fout = open("compar.outtxt", "w")
   s = fin.readline().strip()
   N = len(s) + 1
   fout.write(str(N) + "\n")
   maxx = N
   minn = 1
   for i in range(N):
       if s[i] == '<':
           fout.write(str(minn) + " ")
           minn += 1
       else:
           fout.write(str(maxx) + " ")
           maxx -= 1
   fout.close()

if __name__ == "__main__":

   main()

</syntaxhighlight>