Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | dicearray.in, dicearray.out | Sursă | Algoritmiada 2022, Runda 3 |
Autor | Tulba-Lecu Gabriel | Adăugată de | |
Timp execuţie pe test | 0.4 sec | Limită de memorie | 262144 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Dice Array
Gimi şi Victor, doi tovăraşi buni, într-o după-amiză de vară s-au hotărât să joace barbut. Jocul de barbut constă în aruncarea a N zaruri şi astfel obţinerea unui şir Z de N zaruri. Scorul unei aruncări se obţine prin însumarea punctelor de pe faţa de deasupra a celor N zaruri.
Toate zarurile au următoarea desfăşurare plană:
Întrucât suma valorilor de pe două feţe opuse ale unui zar este mereu 7, un zar poate fi descris printr-un triplet (top, front, left), unde:
- top reprezintă valoarea de pe faţa de deasupra zarului (perpendiculară pe axa oY)
- front reprezintă valoarea de pe faţa din faţa zarului (perpendiculară pe axa oX)
- left reprezintă valoarea de pe faţa din stânga zarului (perpendiculară pe axa oZ)
De exemplu, zarul (6, 2, 3) arată astfel:
Când Gimi aruncă cu zarurile îi zice lui Victor: "Scoate mă şi tu o acadea până dau eu cu zarurile astea."
Cât timp Victor este distras, Gimi are timp să trişeze prin efectuarea a Q operaţii asupra şirului de zaruri. O operaţie poate fi descrisă printr-un triplet (l, r, d) astfel:
- toate zarurile Z[i] cu i de la l la r se rotesc în sens trigonometric (invers acelor de ceasornic) cu 90o de grade pe axa d ∈ {'x', 'y', 'z'}, privind dinspre sensul pozitiv al axelor. De exemplu, zarul (6, 2, 3) după o rotire pe axa 'x' devine zarul (4, 2, 6), după o rotire pe axa 'y' devine (6, 3, 5), şi după o rotire pe axa 'z' devine (2, 1, 3).
Gimi vrea să afle care este scorul pe care l-a obţinut după ce a aplicat cele Q operaţii asupra şirului.
Date de intrare
Fişierul de intrare dicearray.in va conţine pe prima linie două numere naturale N şi Q, reprezentând numărul de zaruri şi numărul de operaţii.
Pe următoarele N linii se vor afla câte trei numere (top, front, left) ce descriu cele N zaruri.
Pe următoarele Q linii se se vor află două numere (l, r) şi un caracter d ∈ {'x', 'y', 'z'} reprezentând operaţiile făcute asupra şirului de zaruri.
Date de ieşire
În fişierul de ieşire dicearray.out se va afla un singur număr S, reprezentând scorul pe care l-a obţinut Gimi după ce a evectuat cele Q operaţii.
Restricţii
- 1 ≤ N, Q ≤ 70 000
- Pentru teste în valoare de 20 de puncte: 1 ≤ N, Q ≤ 1 000 şi singurul tip de rotaţie va fi cel în jurul axei Ox
- Pentru teste în valoare de 30 de puncte: 1 ≤ N, Q ≤ 1 000
- Pentru teste în valoare de 20 de puncte: 1 ≤ N, Q ≤ 70 000 şi singurul tip de rotaţie va fi cel în jurul axei Ox
- Pentru teste în valoare de 30 de puncte: 1 ≤ N, Q ≤ 70 000
- Atenţie! Toate operaţiile făcute de Gimi trebuie efectuate în ordinea datelor de intrare.
Exemplu
dicearray.in | dicearray.out |
---|---|
3 3 6 2 3 6 2 3 6 2 3 1 1 x 2 2 y 3 3 z | 12 |
6 3 1 2 4 5 6 3 4 5 1 6 4 2 3 2 1 3 1 5 4 5 y 3 4 z 3 4 x | 22 |
12 5 2 6 4 5 3 1 3 2 1 2 6 4 4 2 6 5 3 1 4 6 5 2 4 1 5 4 6 6 3 5 2 3 6 2 4 1 2 4 z 7 11 z 6 8 x 2 2 x 1 1 z | 50 |
Explicaţie
Pentru primul exemplu, după rotiri zarurile vor fi (4, 2, 6), (6, 3, 5), (2, 1, 3). Răspunsul este 4 + 6 + 2 = 12.