<?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=1755_-_Democratie</id>
	<title>1755 - Democratie - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1755_-_Democratie"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1755_-_Democratie&amp;action=history"/>
	<updated>2026-05-01T04:47:10Z</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=1755_-_Democratie&amp;diff=9653&amp;oldid=prev</id>
		<title>Raul: Pagină nouă: Arpsod are în curtea sa &lt;code&gt;N&lt;/code&gt; copaci foarte bătrâni, așezați în linie și numerotați de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;N&lt;/code&gt;. Fiecare copac are o înălțime cunoscută, &lt;code&gt;H&lt;sub&gt;i&lt;/sub&gt;&lt;/code&gt;. Există riscul ca la un vânt mai puternic aceștia să cadă, provocând stricăciuni.  Astfel Arpsod a angajat doi muncitori pentru a-i tăia copacii. Primul muncitor va începe să taie copacii în ordinea &lt;code&gt;1, 2, 3, ... ,N&lt;/code&gt; iar cel de-al doilea în ordi...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1755_-_Democratie&amp;diff=9653&amp;oldid=prev"/>
		<updated>2024-02-17T17:34:28Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Arpsod are în curtea sa &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci foarte bătrâni, așezați în linie și numerotați de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Fiecare copac are o înălțime cunoscută, &amp;lt;code&amp;gt;H&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Există riscul ca la un vânt mai puternic aceștia să cadă, provocând stricăciuni.  Astfel Arpsod a angajat doi muncitori pentru a-i tăia copacii. Primul muncitor va începe să taie copacii în ordinea &amp;lt;code&amp;gt;1, 2, 3, ... ,N&amp;lt;/code&amp;gt; iar cel de-al doilea în ordi...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Arpsod are în curtea sa &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci foarte bătrâni, așezați în linie și numerotați de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Fiecare copac are o înălțime cunoscută, &amp;lt;code&amp;gt;H&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Există riscul ca la un vânt mai puternic aceștia să cadă, provocând stricăciuni.&lt;br /&gt;
&lt;br /&gt;
Astfel Arpsod a angajat doi muncitori pentru a-i tăia copacii. Primul muncitor va începe să taie copacii în ordinea &amp;lt;code&amp;gt;1, 2, 3, ... ,N&amp;lt;/code&amp;gt; iar cel de-al doilea în ordinea &amp;lt;code&amp;gt;N, N-1, N-2, ... 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fiind un tărâm democratic, fiecare muncitor dorește să fie plătit pentru fiecare metru pe care îl taie. Muncitorul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; are un tarif de &amp;lt;code&amp;gt;T1&amp;lt;/code&amp;gt; pe metru iar muncitorul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; un tarif de &amp;lt;code&amp;gt;T2&amp;lt;/code&amp;gt; pe metru. Dacă un muncitor a început să taie un copac, acesta îl va tăia integral. Din motive de protecție a muncii, muncitorilor nu le este permis să lucreze simultan. De aici apare următoarea pretenție: dacă după tăierea unui copac, muncitorul nu este înlocuit de colegul său, acesta va cere un cost suplimentar &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; pentru a rămâne să taie în continuare.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă avem &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; copaci: &amp;lt;code&amp;gt;1, 2, 3&amp;lt;/code&amp;gt; și muncitorul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; taie singur toți copacii, acesta va cere un cost suplimentar de &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ori (pentru copacul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și copacul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Arpsod vă cere să determinați costul minim pe care îl poate plăti astfel încât toți cei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci să fie tăiați.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fișierului &amp;lt;code&amp;gt;democratie.in&amp;lt;/code&amp;gt; se va afla numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de copaci. &lt;br /&gt;
&lt;br /&gt;
Pe cea de-a doua linie vor exista &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule reprezentând înălțimile celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci.&lt;br /&gt;
&lt;br /&gt;
Pe cea de-a treia linie se vor afla două numere naturale &amp;lt;code&amp;gt;T1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;T2&amp;lt;/code&amp;gt; reprezentând tariful pe metru al muncitorului &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; respectiv al muncitorului &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pe ultima linie se vor afla două numere naturale &amp;lt;code&amp;gt;C1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;C2&amp;lt;/code&amp;gt; reprezentând costul suplimentar cerut de muncitorul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; respectiv muncitorul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul &amp;lt;code&amp;gt;democratie.out&amp;lt;/code&amp;gt; se va scrie, pe prima și singura linie din fișier, costul minim pe care Arpsod trebuie să-l plătească.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ T1, T2 ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ C1, C2 ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ H&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează că pentru &amp;lt;code&amp;gt;20%&amp;lt;/code&amp;gt; din teste &amp;lt;code&amp;gt;1 ≤ N ≤ 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* Costul suplimentar este același indiferent de înălțimea copacului ce va fi tăiat.&lt;br /&gt;
* Este posibil ca un muncitor să taie singur toți copacii.&lt;br /&gt;
* Un muncitor va tăia complet un copac.&lt;br /&gt;
* Cam scumpă democrația asta!&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;democratie.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 1 2 3 4&lt;br /&gt;
 7 2&lt;br /&gt;
 3 9&lt;br /&gt;
&amp;lt;code&amp;gt;democratie.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 34&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Ordinea muncitorilor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;M2 -&amp;gt; M1 -&amp;gt; M2 -&amp;gt; M2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Costul: &amp;lt;code&amp;gt;(2*4) + (7*1) + (2*3) + (2*2 + 9)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
Nmax = 100002&lt;br /&gt;
inf = 2000000000&lt;br /&gt;
&lt;br /&gt;
N, T1, T2, C1, C2 = 0, 0, 0, 0, 0&lt;br /&gt;
v = [0] * Nmax&lt;br /&gt;
Sol = inf&lt;br /&gt;
config = [0] * Nmax&lt;br /&gt;
&lt;br /&gt;
def bkt(poz):&lt;br /&gt;
    global N, T1, T2, C1, C2, Sol, v, config&lt;br /&gt;
&lt;br /&gt;
    if poz &amp;gt; N:&lt;br /&gt;
        st, dr = 1, N&lt;br /&gt;
        Total = 0&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, N + 1):&lt;br /&gt;
            if config[i] == 1:&lt;br /&gt;
                Total += v[st] * T1&lt;br /&gt;
                st += 1&lt;br /&gt;
&lt;br /&gt;
                if config[i - 1] == config[i]:&lt;br /&gt;
                    Total += C1&lt;br /&gt;
            else:&lt;br /&gt;
                Total += v[dr] * T2&lt;br /&gt;
                dr -= 1&lt;br /&gt;
&lt;br /&gt;
                if config[i - 1] == config[i]:&lt;br /&gt;
                    Total += C2&lt;br /&gt;
&lt;br /&gt;
        Sol = min(Sol, Total)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, 3):&lt;br /&gt;
        config[poz] = i&lt;br /&gt;
        bkt(poz + 1)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global N, T1, T2, C1, C2, Sol, v, config&lt;br /&gt;
&lt;br /&gt;
    lines = sys.stdin.readlines()&lt;br /&gt;
    N = int(lines[0])&lt;br /&gt;
&lt;br /&gt;
    v = list(map(int, lines[1].split()))&lt;br /&gt;
&lt;br /&gt;
    T1, T2, C1, C2 = map(int, lines[2].split())&lt;br /&gt;
&lt;br /&gt;
    bkt(1)&lt;br /&gt;
&lt;br /&gt;
    print(Sol)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
</feed>