ConcursC++17

valutar

Valutar este un joc care poate fi jucat de oricâţi jucători. La începutul jocului, fiecare jucător primeşte LL lei şi EE euro, precum şi un jeton numerotat cu numărul jucătorului. Mai exact, dacă există MM jucători, vor fi MM jetoane, numerotate de la 11 la MM.
Tabla de joc este harta unui oraş pe care este ilustrat un traseu circular ce conţine NN case de schimb valutar, numerotate în ordinea de pe traseu de la 11 la NN. Fiind circular, după casa NN urmează casa 11. Pentru fiecare casă de schimb valutar se cunosc două valori CC şi VV (CC reprezintă câţi lei plăteşte un jucător dacă vrea să cumpere 11 euro de la casa respectivă, iar VV reprezintă câţi lei primeşte jucătorul dacă vrea să vândă 11 euro). Fiecare casă are o anumită culoare în funcţie de care jucătorul ajuns în punctul respectiv trebuie să efectueze o anumită acţiune astfel:

CuloareCodEfect
AlbAJucătorul nu face nimic la această mutare.
RoşuRJucătorul primeşte un cartonaş denumit „pas”. Un jucător care are un cartonaş pas va folosi ulterior cartonaşul (o singură dată, după care cartonaşul va fi scos din joc) şi astfel evită să execute o acţiune pe care nu poate să o execute, pentru a nu fi eliminat din joc.
GalbenGJucătorul trebuie să cumpere ii euro (unde ii este numărul casei de schimb valutar la care se află). Dacă nu are suficienţi lei pentru a face acest lucru şi nu deţine un cartonaş pas, jucătorul este eliminat din joc. Dacă are un cartonaş pas, jucătorul îl va folosi şi nu va executa acţiunea, fără a fi eliminat din joc.
VerdeVJucătorul trebuie să vândă ii euro (unde ii este numărul casei de schimb valutar la care se află). Dacă nu are suficienţi euro pentru a face acest lucru şi nu deţine un cartonaş pas, jucătorul este eliminat din joc. Dacă are un cartonaş pas, jucătorul îl va folosi şi nu va executa acţiunea, fără a fi eliminat.

Iniţial toţi jucătorii pornesc de la casa de schimb valutar 11 care este albă. Există NN case de schimb valutar și MM jucători. Jucătorii mută pe rând în ordinea jetoanelor. Mai întâi mută jucătorul 11, apoi 2,3,…,M2, 3, \dots, M. După jucătorul MM va muta din nou 11 etc. La o mutare, un jucător care nu a fost eliminat din joc:

  • „dă” cu zarul electronic; zarul va afişa un număr întreg nrnr;
  • avansează cu nrnr poziţii (adică dacă jetonul său este la casa ii va ajunge la casa i+nri+nr);
  • execută acţiunea asociată casei de schimb valutar în care a ajuns, în funcţie de culoarea acesteia.

Zarul electronic funcţionează astfel: la mutarea cu numărul jj este generat numărul nrjnr_j calculat după formula nrj=(a⋅nrj−1+b) % N+1nr_j = (a \cdot nr_{j-1}+b)\ \%\ N+1, unde nrj−1nr_{j-1} este numărul generat la mutarea j−1j-1; a,ba, b şi nr0nr_0 sunt trei valori cunoscute, iar %\% reprezintă restul împărţirii întregi (mod).

Cerință

Scrieţi un program care să rezolve următoarele cerinţe:

  • determină numărul de jucători existenţi în joc după XX mutări;
  • determină jucătorul care a rămas în joc şi care are cea mai mare sumă de Euro după XX mutări.

Date de intrare

Fişierul de intrare valutar.in conţine pe prima linie cerinţa care trebuie să fie rezolvată (11 sau 22).
Pe a doua linie se află numerele naturale a,ba, b şi nr0nr_0, cu semnificaţia din enunţ.
Pe a treia linie se află numerele naturale N,M,L,E,XN, M, L, E, X, reprezentând numărul de case de schimb valutar, numărul de jucători, câţi lei şi câţi euro primeşte fiecare jucător la începutul jocului, respectiv numărul de mutări din joc. Pe următoarele NN linii sunt descrise casele de schimb valutar, câte o casă pe o linie, în ordinea de la 11 la NN, sub forma Cod C VCod \ C \ V, cu semnificaţiile din enunţ. Valorile scrise pe aceeaşi linie sunt separate prin câte un spaţiu.

Date de ieșire

Fişierul de ieşire valutar.out va conţine o singură linie. Dacă cerinţa este 11, linia va conţine un număr natural reprezentând numărul de jucători existenţi în joc după XX mutări. Dacă cerinţa este 22, linia va conţine numărul jetonului jucătorului rămas în joc şi care are cea mai mare sumă de euro după XX mutări.

Restricții și precizări

  • 1≤M,C,V≤1001 \leq M, C, V \leq 100;
  • 1≤a,b,nr0,N,X≤10 0001 \leq a, b, nr_0, N, X \leq 10 \ 000;
  • 1≤L,E≤1061 \leq L, E \leq 10^6;
  • Toate casele de schimb valutar au suficienţi lei şi euro pentru efectuarea oricărei acţiuni.
  • Se garantează că pentru datele de test la cerinţa 22 va rămâne în joc după XX mutări un singur jucător cu suma maximă de euro.
  • Pentru fiecare cerinţă se acordă 5050% din punctajul obţinut pe teste.

Exemplul 1

valutar.in

1
3 2 7
5 3 2 3 8
A 1 1
G 5 4
G 6 4
V 6 5
R 2 3

valutar.out

1

Exemplul 2

valutar.in

2
3 2 7
5 3 2 3 8
A 1 1
G 5 4
G 6 4
V 6 5
R 2 3

valutar.out

2

Explicații

Numerele care se obţin când se dă cu zarul se generează astfel: nrj=(3⋅nrj−1+2)nr_j = (3 \cdot nr_{j-1}+2)%5+1, unde nr0=7nr_0=7. Există în joc 55 case de schimb valutar şi 33 jucători. Toţi jucătorii au iniţial 22 lei şi 33 euro şi se află la casa de schimb valutar 11 care este albă. Se efectuează 88 mutări astfel:

MutareJucătornrDe unde pleacăUnde ajungeAcţiuneLeiEuroObservații
11415R23A primit un cartonaş pas
22511A23Nu face nimic
33314V23Trebuie să vândă 44 euro, dar nu are decât 33, nu are cartonaş pas, deci este scos din joc.
41252G23Trebuie să cumpere 22 euro, care costă 2⋅5=102 \cdot 5 = 10 lei, el nu are destui bani, dar are un cartonaş pas pe care îl foloseşte, deci rămâne în joc
52415R23A primit un cartonaş pas
61522G23Trebuie să cumpere 22 euro, care costă 2⋅5=102 \cdot 5 = 10 lei, el nu are destui bani, nu mai are niciuun cartonaş, deci este eliminat din joc
72353G23Trebuie să cumpere 33 euro care ar costa 6⋅3=186 \cdot 3 = 18 lei, nu are bani dar are un cartonaş pas pe care îl foloseşte şi nu este eliminat din joc
82235R23Primeşte un cartonaş pas

Sursă și autori

OJI 2019, clasele 7. Emanuela Cerchez.

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 ↑