<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3778_-_Pian</id>
	<title>3778 - Pian - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3778_-_Pian"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3778_-_Pian&amp;action=history"/>
	<updated>2026-05-02T17:59:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3778_-_Pian&amp;diff=10005&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == Ian este un copil pasionat de muzică, așa că părinții săi i-au cumpărat de ziua lui un pian. Pianul lui Ian este mai special, acesta are N clape. Întrucât pianul nu este nou, clapele se mișcă mai greu, astfel apăsarea celei de-a i-a clape durează t[i] secunde.  Deoarece Ian este foarte nerăbdător, s-a hotarât să repare clapele pianului pentru ca apăsarea unei clape să fie cât mai rapidă. Acesta poate selecta două clape vecine i și i+1 ce nec...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3778_-_Pian&amp;diff=10005&amp;oldid=prev"/>
		<updated>2024-06-03T16:38:04Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Ian este un copil pasionat de muzică, așa că părinții săi i-au cumpărat de ziua lui un pian. Pianul lui Ian este mai special, acesta are N clape. Întrucât pianul nu este nou, clapele se mișcă mai greu, astfel apăsarea celei de-a i-a clape durează t[i] secunde.  Deoarece Ian este foarte nerăbdător, s-a hotarât să repare clapele pianului pentru ca apăsarea unei clape să fie cât mai rapidă. Acesta poate selecta două clape vecine i și i+1 ce nec...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Ian este un copil pasionat de muzică, așa că părinții săi i-au cumpărat de ziua lui un pian. Pianul lui Ian este mai special, acesta are N clape. Întrucât pianul nu este nou, clapele se mișcă mai greu, astfel apăsarea celei de-a i-a clape durează t[i] secunde.&lt;br /&gt;
&lt;br /&gt;
Deoarece Ian este foarte nerăbdător, s-a hotarât să repare clapele pianului pentru ca apăsarea unei clape să fie cât mai rapidă. Acesta poate selecta două clape vecine i și i+1 ce necesită t[i], respectiv t[i+1] secunde pentru a fi apăsate și le lustruiește. În urma lustruirii, cele două clape vor necesita doar cmmdc(t[i],t[i+1]) secunde pentru apăsarea fiecăreia. Practic, o operație va efectua următoarea transformare asupra clapelor: t[i] = t[i + 1] = cmmdc(t[i], t[i+1]).&lt;br /&gt;
&lt;br /&gt;
Ian consideră ca pianul este lustruit dacă timpul de apăsare al fiecărei clape este minim posibil.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
* Cerința 1: Ian vrea să facă un riff (adică să apese fiecare clapă o singură dată) și vrea să știe care ar fi durata de timp a unui riff pe pianul lustruit.&lt;br /&gt;
* Cerința 2: Pentru că Ian nu are timp de pierdut cu lustruitul, acesta vrea o listă de instrucțiuni de lungime minimă asfel încât dupa efectuarea instrucțiunilor pianul să fie lustruit.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare pian.in conține pe prima linie numărul C ce reprezintă cerința care trebuie rezolvată. Pe următoarea linie se află N, numărul de clape ale pianului. Pe următoarea linie se vor afla N numere separate prin câte un spațiu, al i-lea număr reprezentând durata inițială t[i] necesară pentru apăsarea clapei cu indicele i.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul pian.out se vor afișa în funcție de cerință următoarele:&lt;br /&gt;
&lt;br /&gt;
* Dacă C = 1, atunci fișierul va conține o singură linie cu un singur număr S, ce reprezintă răspunsul pentru prima cerință.&lt;br /&gt;
* Dacă C = 2, atunci fișierul va conține pe prima linie un număr M care reprezintă numarul minim de operații pe care Ian trebuie să le facă, iar pe următoarea linie M numere separate prin câte un spatiu, al i-lea număr x[i], reprezentând faptul că a i-a operație de lustruire a clapelor se va face între clapele cu indicii x[i] și x[i]+1.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* C ∈ {1, 2}&lt;br /&gt;
* 1 ≤ N ≤ 100.000&lt;br /&gt;
* 1 ≤ v[i] ≤ 1.000.000, pentru orice i ∈ {1, 2, ..., N}&lt;br /&gt;
* 1 ≤ x[j] &amp;lt; N, pentru orice j ∈ {1, 2, ..., M}&lt;br /&gt;
* Daca pentru cerința 2 există mai multe soluții cu număr minim de operații se acceptă oricare.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; pian.in&lt;br /&gt;
 1&lt;br /&gt;
 5&lt;br /&gt;
 2 4 6 8 10&lt;br /&gt;
; pian.out&lt;br /&gt;
 10&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Ian poate lustrui pianul în doar 2 instrucțiuni în următorul mod:&lt;br /&gt;
&lt;br /&gt;
* Aplicăm operația pe clapele 2 și 3. Obținem șirul 2 2 2 8 10&lt;br /&gt;
* Aplicăm operația pe clapele 4 și 5. Obținem șirul 2 2 2 2 2&lt;br /&gt;
În final se va obține șirul de clape: 2 2 2 2 2. Astfel, durata unui riff va fi de 10 secunde.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; pian.in&lt;br /&gt;
 2&lt;br /&gt;
 5&lt;br /&gt;
 2 4 6 8 10&lt;br /&gt;
; pian.out&lt;br /&gt;
 2&lt;br /&gt;
 2 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from math import gcd&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    times = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        # Cerința 1&lt;br /&gt;
        total_time = 0&lt;br /&gt;
        for i in range(N):&lt;br /&gt;
            total_time += gcd(times[i], times[i + 1]) if i &amp;lt; N - 1 else times[i]&lt;br /&gt;
        print(total_time)&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        # Cerința 2&lt;br /&gt;
        operations = []&lt;br /&gt;
        for i in range(N):&lt;br /&gt;
            if gcd(times[i], times[i + 1]) &amp;lt; times[i] or gcd(times[i], times[i + 1]) &amp;lt; times[i + 1]:&lt;br /&gt;
                operations.append(i + 1)&lt;br /&gt;
        print(len(operations))&lt;br /&gt;
        print(*operations)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AjM</name></author>
	</entry>
</feed>