Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
2344 - Dvorak
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Enunt == '''R.''' a descoperit de curând tastatura '''DVORAK''' și s-a decis că poate scrie mult mai rapid și mai corect cod folosind această tastatură decât folosind tastatura '''QWERTY'''. Plictisindu-se, '''R'''. a creat, pentru a onora tastatura lui preferată, '''transformarea''' '''dvorak''', care se realizează prin înlocuirea fiecărei litere dintr-un șir de caractere cu corespondența acesteia dintr-o permutare dată a alfabetului englez. De exemplu, cuvântul '''informatica''' poate să devină, printr-o transformare dvorak, '''cburpmaycja'''. '''H.''', profitor din fire, a decis să intre pe calculatorul lui '''R.''' și să îi fure sursele valoroase de la problemele “rupere” pe care le-a rezolvat. Dar '''R.''' şi-a securizat calculatorul cu o parolă (constând într-o succesiune de litere mici ale alfabetului englez). Din când în când, '''R.''' își modifică o parte din parolă efectuând următoarea operație: alege două poziții în parolă '''Si''' (capăt stânga) si '''Di''' (capăt dreapta) apoi aplică transformarea dvorak asupra secvenței formată din caracterele situate în parolă pe poziții din intervalul '''[Si''', '''Di]'''. Această operație este de tipul '''1''' și este codificată prin: '''1 Si Di'''. Acum '''H.''' are nevoie de ajutorul vostru ca să afle parola şi să furați împreună toate sursele ca sa fiți primii la statistici pe Varena). Din când în când, el vă va da câte un sir de caractere nevid ('''SIR''') și vă va întreba dacă acest șir se regăsește ca subsecvență în parola lui '''R.''' Această operație este de tipul '''2''' și este codificată prin: '''2 SIR''' == Cerinţa == Cunoscându-se permutarea dată, parola lui '''R.''' precum și o succesiune de '''Q''' operații de tipul '''1''' sau '''2''', găsiți răspunsurile la întrebările toate lui '''H.''' == Date de intrare == Pe prima linie a fișierului '''dvorakin.txt''' se va afla numărul natural Q reprezentând numărul de operații din succesiunea dată. Pe cea de-a doua linie se va afla '''permutarea dată''' pentru '''transformarea dvorak'''. Pe cea de-a treia linie se va afla un sir de caractere litere mici, reprezentând '''parola inițială''' a lui '''R.''' Pe fiecare dintre următoarele '''Q''' linii se află câte o operație de tip '''1''' sau '''2''', codificate ca în enunț. == Date de ieșire == Pe fiecare linie a fișierului '''dvorakout.txt''' se va afla răspunsul pentru fiecare dintre intrebările lui '''H.''', în ordinea în care apar în fișierul de intrare: răspundeti cu '''Da''' dacă șirul se regăsește ca subsecvență în parola și '''Nu''' altfel. == Restricţii şi precizări == * '''1 ⩽ Q ⩽ 500''' * Fiecare al '''i'''-lea element al permutării date reprezintă litera în care se transformă cel de-al '''i'''-lea caracter din alfabetul englez într-o transformare dvorak * Se garantează că fiecare literă din permutarea dată apare o singură dată, iar permutarea are fix '''26''' de caractere * Parola este un șir de cel mult '''500''' de litere mici ale alfabetului englez. * Pozițiile caracterelor din parolă sunt numerotate incepând de la '''1''' * '''1 ⩽ Si ⩽ Di ⩽''' lungimea parolei * Intervalele '''[Si''', '''Di]''' corespunzătoare operației '''1''' se pot suprapune * Șirul '''SIR''' pentru operația '''2''' are cel mult '''500''' de caractere == Exemplu 1 == ; dvorakin.txt 6 ifynmlbkpduogahqzsjxcervwt olimpiadadeinformatica 1 1 6 2 info 2 olimpiada 1 8 15 1 9 14 2 olimpiadadeinformaticaecool5 ; dvorakout.txt Datele de intrare corespund restrictiilor impuse Da Nu Nu <br> == Exemplu 2 == ; dvorakin.txt 6 ASDASD ; dvorakout.txt Datele de intrare nu corespund restrictiilor impuse <br> == Explicatie == După prima operație, parola se transformă în '''hopgqpadadeinformatica''' La a doua operație se răspunde cu '''Da'''. La a treia operație se răspunde cu '''Nu'''. După a patra operație, parola se transformă în '''hopgqpaninmpalhrmatica'''. După a cincea operație, parola se transformă în '''hopgqpanpagqiohrmatica'''. La a șasea operație se răspunde cu '''Nu'''. == Rezolvare == <syntaxhighlight lang="python" line> def transform(s, perm, la, r): # Funcția aplică transformarea dvorak pe un substring al șirului s. return s[:la] + ''.join(perm[ord(c) - ord('a')] for c in s[la:r]) + s[r:] def main(): with open('dvorakin.txt', 'r') as fin, open('dvorakout.txt', 'w') as fout: q = int(fin.readline().strip()) perm = fin.readline().strip() s = fin.readline().strip() # Verificăm dacă datele de intrare respectă restricțiile if not (1 <= q <= 500) or len(s) > 500 or len(set(perm)) != 26: fout.write("Datele de intrare nu corespund restrictiilor impuse\n") return fout.write("Datele de intrare corespund restrictiilor impuse\n") for _ in range(q): op = fin.readline().strip().split() if op[0] == '1': # Aplicăm transformarea dvorak s = transform(s, perm, int(op[1]) - 1, int(op[2])) else: # Verificăm dacă șirul se regăsește ca subsecvență în parola fout.write('Da\n' if op[1] in s else 'Nu\n') if __name__ == "__main__": main() </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width