ConcursC++17

pif

După ce a primit de la Simonet, profesorul său de studii sociale, tema pentru proiect, tânărului Trevor i-a venit ideea jocului ”Pay it forward”. Pentru cei care nu știu acest joc, el constă în ajutarea de către Trevor a oamenilor aflați la ananghie. Aceștia la rândul lor vor ajuta alți oameni și așa mai departe.

Fiecare participant (inclusiv Trevor) trebuie să realizeze câte kk fapte bune prin care să ajute oamenii. Vârstnicii și tinerii își îndeplinesc în mod diferit această sarcină. Vârstnicii au nevoie de zv\text{zv} zile pentru a introduce în joc o altă persoană, iar tinerii au nevoie de zt\text{zt} zile. Astfel dacă un vârstnic, respectiv un tânăr, intră în joc în ziua ii, el va introduce la rândul lui în joc prima persoană în ziua i+zvi+\text{zv}, respectiv în ziua i+zti+\text{zt} tânărul, a doua persoană în ziua i+2∗zvi+2*\text{zv}, respectiv în ziua i+2∗zti+2*\text{zt} tânărul și așa mai departe. Astfel numărul de persoane care participă la joc poate fi diferit în funcție de cum sunt alese persoanele vârstnice și cele tinere. Trevor dorește ca în joc să fie realizate în total cât mai multe fapte bune, dar fiecare participant să aducă în joc maximum (k+1)/2(k+1)/2 tineri și maximum (k+1)/2(k+1)/2 vârstnici. Participanții pot aduce mai puține persoane de un anumit tip, dar nu au voie să depășească numărul de (k+1)/2(k+1)/2 persoane de același tip.

Cerință

Care este numărul fb\text{fb} de fapte bune care mai sunt de realizat, după trecerea a nn zile, de către persoanele intrate deja în joc, astfel încât numărul total de fapte bune așteptate (și cele realizate și cele nerealizate) să fie maxim?

Date de intrare

Fișierul de intrare pif.in conține pe prima linie numărul natural nn, pe a doua linie numărul kk și pe a treia linie numerele zv\text{zv} și zt\text{zt} separate printr-un spațiu.

Date de ieșire

În fișierul de ieșire pif.out se va scrie restul împărțirii lui fb\text{fb}, cu semnificația din enunț, la 12345671234567.

Restricții și precizări

  • 1≤n≤1061 \leq n \leq 10^6;
  • 1≤k,zt,zv≤n1 \leq k, \text{zt}, \text{zv} \leq n;
  • Pentru teste în valoare de 3030 de puncte fb≤106\text{fb} \leq 10^6;
  • Pentru teste în valoare de 3030 de puncte zv=zt=1\text{zv} = \text{zt} = 1;
  • Pentru teste în valoare de 2020 de puncte zv=zt≠1\text{zv} = \text{zt} \neq 1;
  • Pentru teste în valoare de 7070 de puncte k⋅n≤106k \cdot n \leq 10^6;

Exemplu

pif.in

4
2
1 2

pif.out

7

Explicație

n=4n=4, k=2k=2, zv=1\text{zv}=1, zt=2\text{zt}=2.

Avem 1616 moduri posibile în care se pot alege persoanele vârstnice și tinere.

Dintre ele, doar 55 respectă condiția ca numărul vârstnicilor și al tinerilor să fie maxim 1. Dintre cele 55 doar două obțin un număr maxim de fapte bune așteptate.

Notăm cu TT pe Trevor, cu VnV_n persoanele vârstnice și cu TnT_n persoanele tinere. Unul dintre cele 22 cazuri cu număr maxim de fapte bune este următorul:

ZiuaPersoane datoare să ajutePersoane ajutateExplicație
00TT-TT începe jocul (intră în joc)
11TT-TT nu ajută pe nimeni (nu au trecut 22 zile)
22TTV1V_1TT ajută V1V_1
33TT-TT nu ajută pe nimeni (nu au trecut 44 zile)
33V1V_1V2V_2V1V_1 ajută V2V_2
44TTT1T_1TT ajută T1T_1
44V1V_1T2T_2V1V_1 ajută T2T_2
44V2V_2V3V_3V2V_2 ajută V3V_3

În zilele următoare:

  • V2V_2 ar trebui să mai ajute încă un tânăr.
  • V3V_3 ar trebui să mai ajute încă două persoane, un tânăr și un vârstnic.
  • T1T_1 ar trebui să mai ajute încă două persoane, un tânăr și un vârstnic.
  • T2T_2 ar trebui să mai ajute încă două persoane, un tânăr și un vârstnic.

Deci au mai rămas 77 fapte bune de realizat.

Celălalt caz cu număr maxim de fapte bune este următorul:

ZiuaPersoane datoare să ajutePersoane ajutateExplicație
00TT-TT începe jocul (intră în joc)
11TT-TT nu ajută pe nimeni (nu au trecut 22 zile)
22TTV1V_1TT ajută V1V_1
33TT-TT nu ajută pe nimeni (nu au trecut 44 zile)
33V1V_1V2V_2V1V_1 ajută V2V_2
44TTT1T_1TT ajută T1T_1
44V1V_1T2T_2V1V_1 ajută T2T_2
44V2V_2T3T_3V2V_2 ajută T3T_3

În zilele următoare:

  • V2V_2 ar trebui să mai ajute încă un tânăr.
  • T1T_1 ar trebui să mai ajute încă două persoane, un tânăr și un vârstnic.
  • T2T_2 ar trebui să mai ajute încă două persoane, un tânăr și un vârstnic.
  • T3T_3 ar trebui să mai ajute încă două persoane, un tânăr și un vârstnic.

În total au mai rămas 77 fapte bune de realizat.

Sursă și autori

OJI 2019, clasele 10. Marcel Drăgan.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑