ConcursC++17

cercetasi

Ionuț s-a înscris recent într-o trupă de cercetași și se pregătește pentru prima sa expediție. Trupa din care face parte Ionuț este formată din NN membri, numerotați cu numere naturale de la 11 la NN. Pentru expediție, trupa trebuie să se împartă în mai multe patrule, fiecare membru ii trebuie să facă parte din exact o patrulă. Între cercetașii din trupă există niște tensiuni, astfel cercetașul ii și cercetașul jj (cu i≠ji \neq j) pot face parte din aceeași patrulă doar dacă ∣i−j∣≥r|i - j| \geq r (unde ∣x∣|x| reprezintă valoarea absolută a numărului xx).

Cerințe

Ionuț, fiind foarte pasionat de numere, se întreabă în câte moduri se pot forma patrule pentru expediție, știind că cercetașul șef vrea ca trupa să se împartă în cel puțin aa patrule și cel mult bb patrule. Două moduri AA și BB de a forma patrulele se consideră diferite dacă au un număr diferit de patrule sau dacă există un cercetaș kk (cu 1≤k≤N1 \leq k \leq N) astfel încât echipa din care face parte kk în modul AA este diferită de cea din modul BB. Cum acest număr poate fi foarte mare, se cere afișarea lui modulo 109+710^9 + 7.

Date de intrare

Fișierul de intrare cercetasi.in conține o singură linie pe care se află, în ordine, numerele NN, rr, aa și bb cu semnificația din enunț. Numerele sunt separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire cercetasi.out va conține, pe o singură linie numărul de moduri în care se pot forma patrulele pentru expediție, modulo 109+710^9 + 7.

Restricții și precizări

  • 1≤N≤100 0001 \leq N \leq 100 \ 000
  • 1≤r≤a≤b≤N1 \leq r \leq a \leq b \leq N
#PunctajRestricții
141≤N≤101 \leq N \leq 10, a=ba = b, r=1r = 1
261≤N≤101 \leq N \leq 10
3810<N≤50010 < N \leq 500, b=2b = 2
46500<N≤5 000500 < N \leq 5 \ 000, a=N−1a = N - 1
57500<N≤5 000500 < N \leq 5 \ 000, r=1r = 1
69500<N≤5 000500 < N \leq 5 \ 000
751≤b⋅N≤5 000 0001 \leq b \cdot N \leq 5 \ 000 \ 000, r=1r = 1
861≤b⋅N≤5 000 0001 \leq b \cdot N \leq 5 \ 000 \ 000
9105 000<N≤100 0005 \ 000 < N \leq 100 \ 000, 0≤b−a≤1000 \leq b - a \leq 100, r=1r = 1
10135 000<N≤100 0005 \ 000 < N \leq 100 \ 000, 0≤b−a≤1000 \leq b - a \leq 100
115r=a−1r = a - 1 sau r=ar = a
1221Fără restricții suplimentare

Exemplul 1

cercetasi.in

4 1 2 2

cercetasi.out

7

Explicație

În primul exemplu avem n=4n = 4 cercetași, oricare doi putând face parte din aceeași patrulă, deoarece r=1r = 1. Cum a=b=2a = b = 2 trebuie să aflăm numărul de moduri de a împărți cercetașii în două patrule. Avem următoarele 7 moduri:

({1},{2,3,4})(\{1\}, \{2, 3, 4\}); ({2},{1,3,4})(\{2\}, \{1, 3, 4\}); ({3},{1,2,4})(\{3\}, \{1, 2, 4\}); ({4},{1,2,3})(\{4\}, \{1, 2, 3\}); ({1,2},{3,4})(\{1, 2\}, \{3, 4\}); ({1,3},{2,4})(\{1, 3\}, \{2, 4\}); ({1,4},{2,3})(\{1, 4\}, \{2, 3\}).

Exemplul 2

cercetasi.in

5 2 2 3

cercetasi.out

8

Explicație

În al doilea exemplu avem n=5n = 5 cercetași, oricare doi alăturați neputând face parte din aceeași patrulă, deoarece r=2r = 2. Avem a=2a = 2 și b=3b = 3, deci trebuie să aflăm numărul de moduri de a împărți cercetașii în două sau trei patrule.

Pentru a împărți cercetașii în două patrule avem o posibilitate:

({1,3,5},{2,4})(\{1, 3, 5\}, \{2, 4\}).

Observăm aici că o împărțire de forma ({1,3,4},{2,5})(\{1, 3, 4\}, \{2, 5\}) nu este posibilă deoarece 11 și 44 fac parte din aceeași patrulă, dar ∣4−3∣=1<r=2|4 - 3| = 1 < r = 2.

Trebuie acum să aflăm numărul de moduri de a împărți cercetașii în trei patrule. Avem 7 posibilități:

({1},{2,4},{3,5})(\{1\}, \{2, 4\}, \{3, 5\}); ({1,3},{2,4},{5})(\{1, 3\}, \{2, 4\}, \{5\}); ({1,3},{2,5},{4})(\{1, 3\}, \{2, 5\}, \{4\}); ({1,3,5},{2},{4})(\{1, 3, 5\}, \{2\}, \{4\}); ({1,4},{2,5},{3})(\{1, 4\}, \{2, 5\}, \{3\});

({1,5},{2,4},{3})(\{1, 5\}, \{2, 4\}, \{3\}); ({1,4},{2},{3,5})(\{1, 4\}, \{2\}, \{3, 5\}).

Astfel, sunt în total 1+7=81 + 7 = 8 posibilități.

Exemplul 3

cercetasi.in

97 3 8 29

cercetasi.out

987428607

Sursă și autori

ONI 2026, clasele 10. Matei Benchea.

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 ↑