Zarul folosit la diverse jocuri este un cub care are desenat pe fiecare faţă a sa 1
, 2
, 3
, 4
, 5
sau 6
puncte. Pe un zar nu există două feţe cu acelaşi număr de puncte şi suma punctelor de pe oricare două feţe opuse este egală cu 7
.
Pe o masă de joc este desenat un traseu în formă de pătrat, cu latura de dimensiune n
. Fiecare latură a traseului este împărţită în n
pătrăţele identice, care au latura egală cu cea a zarului. Zarul este aşezat iniţial în colţul din stânga sus al traseului şi apoi rostogolit de pe o faţă pe alta, din pătrăţel în pătrăţel, de-a lungul traseului parcurs în sensul acelor de ceasornic.
În orice moment ne-am uita la zar, putem vedea numărul punctelor desenate pe trei din feţele sale (aşa cum se vede în desenul de mai sus).
Notăm cu f1
faţa cubului orientată spre noi, f2
faţa superioară a cubului, respectiv cu f3
faţa laterală din dreapta. Pentru exemplul din figură: n=4
, faţa dinspre noi (f1
) conţine trei puncte, faţa superioară (f2
) conţine două puncte, faţa laterală din dreapta (f3
) conţine un punct, iar sensul de deplasare este cel precizat prin săgeţi.
Cerinţă
Cunoscând dimensiunea n
a traseului şi numărul punctelor de pe cele trei feţe ale zarului în poziţia iniţială, determinaţi după k
rostogoliri numărul punctelor ce se pot observa pe fiecare din cele trei feţe ale zarului.
Date de intrare
Fișierul de intrare zar.in
conține:
- pe prima linie numerele naturale
n
şik
despărţite print-un spaţiu. - pe linia a doua trei numere naturale separate printr-un spaţiu ce corespund numărului de puncte de pe feţele
f1
,f2
, respectivf3
ale zarului în poziţia iniţială.
Date de ieșire
Fișierul de ieșire zar.out
va conține o singură linie cu trei numere naturale separate prin câte un spaţiu, care reprezintă numărul punctelor ce se pot observa pe feţele f1
, f2
şi f3
(în această ordine) după ce au fost efectuate k
rostogoliri pe traseul dat.
Restricții și precizări
2≤n≤20000, 1≤k≤1000000
Exemplu
zar.in
4 11 3 2 1
zar.out
1 5 3
Explicație
Fiecare latură a traseului este formată din 4
căsuţe şi se vor efectua 11
rostogoliri.
După prima rostogolire spre dreapta, valorile celor trei feţe (f1
, f2
, respectiv f3
) ale zarului vor fi 3
, 6
şi 2
. După a doua rostogolire obţinem numerele 3
, 5
, 6
, iar după a treia rostogolire valorile feţelor vor fi 3
, 1
şi 5
.
În acest moment zarul a parcurs o latură a traseului. Următoarele trei rostogoliri se vor efectua în jos, de-a lungul traseului iar feţele vor avea succesiv valorile 1
, 4
, 5
apoi 4
, 6
, 5
şi 6
, 3
, 5
.
Urmează rostogolirile spre stânga, pe feţele zarului vom observa valorile 6
, 5
, 4
apoi 6
, 4
, 2
şi respectiv 6
, 2
, 3
. Ultimele două rostogoliri se vor efectua în sus de-a lungul laturii din stânga a traseului. După penultima rostogolire obţinem 5
, 6
, 3
, iar după ultima rostogolire valorile feţelor vor fi 1
, 5
şi 3
.
SOLUTIE
#include <iostream> #include <fstream> using namespace std; int main() { ifstream cin("zar.in"); ofstream cout("zar.out"); int l,n,f1,f2,f3,c,cnt=0,i=0; cin>>l>>n>>f1>>f2>>f3; while(cnt<n) { i=0; while(i<l-1) { if(cnt>=n) break; i++; c=f3; f3=f2; f2=7-c; cnt++; ///cout<<"1 "; } i=0; while(i<l-1) { if(cnt>=n) break; i++; c=f1; f1=f2; f2=7-c; cnt++; ///cout<<"2 "; } i=0; while(i<l-1) { if(cnt>=n) break; i++; c=f2; f2=f3; f3=7-c; cnt++; ///cout<<"3 "; } i=0; while(i<l-1) { if(cnt>=n) break; i++; c=f2; f2=f1; f1=7-c; cnt++; ///cout<<"4 "; } } cout<<f1<<" "<<f2<<" "<<f3; return 0; }