ZAR

Zarul folosit la diverse jocuri este un cub care are desenat pe fiecare faţă a sa 12345 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 şi k 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 f1f2, respectiv f3 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 f1f2 ş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 (f1f2, respectiv f3) ale zarului vor fi 36 şi 2. După a doua rostogolire obţinem numerele 356, iar după a treia rostogolire valorile feţelor vor fi 31 ş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 145 apoi 465 şi 635.

Urmează rostogolirile spre stânga, pe feţele zarului vom observa valorile 654 apoi 642 şi respectiv 623. Ultimele două rostogoliri se vor efectua în sus de-a lungul laturii din stânga a traseului. După penultima rostogolire obţinem 563, iar după ultima rostogolire valorile feţelor vor fi 15 ş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;
}
%d bloggers like this: