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
3059 - Lexicografic
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 == Se dă un șir v format din N elemente naturale nenule nu neapărat distincte. Asupra șirului putem aplica un singur tip de operație: interschimbarea a două elemente aflate pe poziții consecutive. == Cerinţa == Dându-se un număr natural K, se cere șirul minim lexicografic ce se poate obține prin aplicarea a cel mult K interschimbări de elemente de pe poziții consecutive. == Date de intrare == În fișierul lexicografic.in se află pe prima linie T, reprezentând numărul de teste. Urmează cele T teste, fiecare pe câte două linii. Pe prima linie din cadrul unui test se află două numere N și K separate prin spațiu. Pe linia a doua din cadrul unui test se află cele N elemente ale șirului v separate prin spații. == Date de ieșire == În fișierul lexicografic.out se vor afișa cele T linii, câte una corespunzătoare răspunsului pe fiecare test. Linia corespunzătoare unui test va conține cele N elemente separate prin spații ale șirului minim lexicografic ce s-a obținut din șirul inițial, după aplicarea a cel mult K interschimbări de elemente de pe poziții consecutive. == Restricţii şi precizări == * 1 ≤ N ≤ 250.000; * T ≤ 2500; * într-un fișier de intrare suma totală a lungimilor șirurilor corespunzătoare celor T teste nu va depăși 250.000; * 1 ≤ K ≤ N*(N-1)/2; * 1 ≤ v[i] ≤ N, pentru 1 ≤ i ≤ N; * Vă rugăm să acordați atenție tipului de date necesar pentru a citi valoarea lui K; * Pentru acordarea punctajului pe un fișier de test este necesară rezolvarea corectă a tuturor celor T teste; * Pentru teste în valoare de 5 puncte se garantează K = N * (N – 1) / 2; * Pentru alte teste în valoare de 7 puncte se garantează K = 1; * Pentru alte teste în valoare de 23 de puncte se garantează T ≤ 10, N ≤ 50; * Pentru alte teste în valoare de 4 puncte se garantează T ≤ 10, N ≤ 100; * Pentru alte teste în valoare de 12 puncte se garantează T ≤ 10, N ≤ 500; * Pentru alte teste în valoare de 24 de puncte se garantează T ≤ 10, N ≤ 2000; * Un șir a1, a2, …, an este mai mic lexicografic decât un alt șir b1, b2, …, bn dacă există un număr întreg P mai mic sau egal cu N astfel * încât: a1 = b1, a2 = b2, … , aP-1 = bP-1, iar aP < bP. == Exemplul 1 == ; lexicografic.in 3 5 2 4 2 3 1 1 4 3 2 1 3 4 6 4 5 3 5 3 4 6 ; lexicografic.out 2 3 4 1 1 1 2 3 4 3 3 5 4 5 6 <br> == Explicație == Pentru primul test: Șirul este format din N = 5 elemente, și anume v=(4,2,3,1,1). Putem efectua K=2 interschimbări. Interschimbând elementele v[1] și v[2] obținem șirul (2,4,3,1,1), apoi după interschimbarea elementelor v[3] și v[2] se obține șirul minim lexicografic (2,3,4,1,1). == Rezolvare == <syntaxhighlight lang="python" line> def min_lexicographic_sequence(N, K, v): for _ in range(min(K, N)): for i in range(N - 1): if v[i] > v[i + 1]: v[i], v[i + 1] = v[i + 1], v[i] return v def main(): with open("lexicografic.in", "r") as fin, open("lexicografic.out", "w") as fout: T = int(fin.readline()) for _ in range(T): N, K = map(int, fin.readline().split()) v = list(map(int, fin.readline().split())) min_lex_seq = min_lexicographic_sequence(N, K, v) fout.write(" ".join(map(str, min_lex_seq)) + "\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