Teze

Time limit: 0.1s Memory limit: 64MB Input: teze.in Output: teze.out

Profesorul de informatică trebuie să corecteze tezele a mm elevi. Elevii au avut de rezolvat nn probleme în teză, numerotate de la 11 la nn. Fiecare elev a rezolvat toate problemele, deci profesorul are de corectat în total m×nm \times n probleme. El observă că luând lucrările la rând și corectând toate problemele din prima lucrare, apoi toate problemele din a doua lucrare, ș.a.m.d., nu obține întotdeauna cel mai mic timp total de corectare a tezelor. Profesorul are următoarea metodă de corectură:

  • Toate tezele se vor corecta în ff faze (1fn1 \leq f \leq n);
  • În fiecare fază ii se va decide asupra unei submulțimi de probleme care nu au fost deja corectate, SiS_i. Aceste probleme se vor corecta în toate tezele înainte să se revină la prima teză;
  • Formal, alegem Si{1,,n}S_i \subseteq \lbrace 1, \ldots, n \rbrace astfel încât:
    • SiSj=, i, j{1,,f}, ijS_i \cap S_j = \emptyset, \forall\ i, \ j \in \lbrace 1, \ldots, f \rbrace , \ i \neq j;
    • S1Sf={1,, n}S_1 \cup \ldots \cup S_f = \lbrace1, \ldots, \ n \rbrace.

La începerea corectării fiecărei teze, trebuie identificat numele elevului, proces care durează exact pp secunde de fiecare dată, chiar dacă se revine la aceeași teză de mai multe ori.

După începerea corectării unei teze, căutarea fiecărei probleme durează kk secunde. Corectarea primei probleme din submulțimea aleasă durează t1t_1 secunde, corectarea celei de-a doua probleme durează t2t_2 secunde ș.a.m.d. Se garantează că t1<t2<<tnt_1 < t_2 < \ldots < t_n. De fiecare dată când se revine la o anumită teză și se reîncepe corectarea ei cu o altă submulțime de probleme, corectarea primei probleme din submulțime va dura din nou t1t_1 secunde.

Valoarea t1t_1 va fi dată în fișierul de intrare împreună cu valorile d0,,dq1d_0, \ldots , d_{q−1}, din care se vor obține celelalte valori din șirul tt prin formula: ti=ti1+di mod q, i{2,,n}t_i = t_{i−1} + d_{i \text{ mod } q}, \forall\ i \in \lbrace 2, \ldots , n \rbrace, unde x mod yx \text{ mod } y semnifică restul împărțirii lui xx la yy.

Cerință

Să se determine timpul minim în care pot fi corectate cele mm lucrări.

Date de intrare

Pe prima linie a fișierului de intrare teze.in se află numerele nn, mm, pp și kk, despărțite prin câte un spațiu. Pe a doua linie se află două valori t1t_1 și qq, despărțite printr-un spațiu. Pe următoarele qq linii se află valorile d0,,dq1d_0, \ldots, d_{q-1}.

Date de ieșire

În fișierul de ieșire teze.out se va scrie un singur număr, reprezentând numărul de secunde în care se pot corecta tezele, modulo 109+710^9 + 7.

Restricții și precizări

  • 1n1 500 000 0001 \leq n \leq 1 \ 500 \ 000 \ 000
  • 1m,q,k1 0001 \leq m, q, k \leq 1 \ 000
  • 1p10101 \leq p \leq 10^{10}
  • 1t1,di101 \leq t_1, d_i \leq 10
# Punctaj Restricții
1 5 n25n \leq 25
2 10 n50n \leq 50
3 20 n10 000n \leq 10 \ 000
4 30 n107n \leq 10^7
5 7 q=1q = 1
6 8 q=2q = 2
7 20 Fără restricții suplimentare

Exemplu

teze.in

2 10 5 2
1 1
2

teze.out

130

Explicație

Avem două probleme în teză, iar t1=1,t2=t1+d0=1+2=3t_1 = 1, t_2 = t_1 + d_0 = 1 + 2 = 3. Dacă le corectăm împreună, timpul de corectare pentru fiecare teză va fi: 55 secunde pentru găsirea numelui elevului, 22 secunde pentru găsirea primei probleme, 11 secundă pentru corectarea primei probleme, 22 secunde pentru găsirea problemei a doua și 33 secunde pentru corectarea problemei a doua, deci în total 5+2+1+2+3=135 + 2 + 1 + 2 + 3 = 13 secunde pentru fiecare dintre cele 1010 teze, adică 130130 de secunde în total.

O altă posibilitate este să corectăm prima dată problema 11 în toate tezele, iar pe urmă să corectăm problema 22 în toate tezele. Pentru corectarea primei probleme avem: 55 secunde începerea corectării, 22 secunde găsirea problemei și 11 secundă corectarea problemei, în total 5+2+1=85 + 2 + 1 = 8 pentru o teză, în total 8080 de secunde pentru toate tezele.

Pentru corectarea problemei 22 avem exact același calcul, rezultă în total 160160 de secunde, deci prima metodă a fost mai eficientă și posibilitate mai bună nu există.

Log in or sign up to be able to send submissions!