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
3044 - Comun 1
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 == Tocmai ai primit un șir v de K numere naturale nenule distincte. Plecând de la acest șir, te-ai gândit să construiești un șir w de N numere naturale distincte, astfel încât un număr x este în șirul w dacă și numai dacă exista inițial în șirul v sau se pot alege cel puțin două numere din șirul v astfel încât x este cel mai mare divizor comun al acelor numere. De exemplu, dacă v = {4, 6, 7} atunci w = {1, 2, 4, 6, 7}. Uimit de proprietățile matematice frumoase ale noului șir w, ai uitat din păcate șirul original v de la care ai pornit. == Cerinţa == Dându-se șirul w, să se găsească un șir posibil inițial v având un număr minim de elemente. == Date de intrare == Fișierul de intrare comun.in conține pe prima linie un număr natural N. Pe cea de-a doua linie se află N numere naturale nenule distincte, în ordine strict crescătoare, reprezentând șirul w. == Date de ieșire == Fișierul de ieșire comun.out va conține pe prima linie numărul minim K de elemente ale șirului v. Pe cea de-a doua linie se vor afla K numere naturale distincte, în ordine strict crescătoare, reprezentând șirul propriu-zis. == Restricţii şi precizări == * Toate valorile din fișierul de intrare sunt numere naturale nenule mai mici sau egale cu 100.000. * Pentru teste în valoare de 15 puncte, toate valorile din fișierul de intrare sunt mai mici sau egale cu 20. * Pentru teste în valoare de 50 de puncte, toate valorile din fișierul de intrare sunt mai mici sau egale cu 2000. * Se garantează că există măcar o soluție. * Dacă există mai multe șiruri inițiale cu număr minim de elemente, oricare este acceptat. == Exemplul 1 == ; comun.in 5 1 2 4 6 7 ; comun.out 3 4 6 7 == Explicație == 1 = cmmdc(6, 7) = cmmdc(4, 6, 7). 2 = cmmdc(4, 6). Se poate demonstra că orice alt șir cu proprietatea cerută are măcar 3 elemente. <br> == Exemplul 2 == ; comun.in 4 2 4 8 16 ; comun.out 4 2 4 8 16 == Explicație == Nu există niciun șir de mai puțin de 4 elemente cu proprietatea cerută. <br> == Rezolvare == <syntaxhighlight lang="python" line> def gcd(a, b): while b: a, b = b, a % b return a def find_initial_sequence(w): n = len(w) initial_sequence = [] initial_sequence.append(w[0]) for i in range(1, n): current_gcd = gcd(initial_sequence[-1], w[i]) if current_gcd != w[i]: initial_sequence.append(w[i]) return initial_sequence def main(): with open("comun.in", "r") as f: n = int(f.readline()) w = list(map(int, f.readline().split())) initial_sequence = find_initial_sequence(w) with open("comun.out", "w") as f: f.write(str(len(initial_sequence)) + "\n") f.write(" ".join(map(str, initial_sequence))) 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