La un concurs de robotică, în timpul prezentării, un roboţel cu corp cilindric cu diametrul de o unitate scapă de sub control şi se deplasează într-un ring de formă dreptunghiulară. Ringul este împărţit în N x M pătrate identice, cu latura de o unitate, aşezate pe N linii şi M coloane.
Robotul poate părăsi ringul numai pe la colţuri, acestea fiind numerotate de la 1 la 4, colţul cu numărul 1 fiind cel din stânga jos apoi restul fiind numerotate în sens trigonometric. Suprafaţa ringului este delimitată de exterior prin intermediul a patru pereţi despărţitori: doi pereţi “verticali” (aşezaţi de la colţul 1 la colţul 4, respectiv de la colţul 2 la colţul 3) şi doi pereţi “orizontali” (aşezaţi de la colţul 1 la colţul 2, respectiv de la colţul 3 la colţul 4), fără a bloca ieşirile, ca în desenul alăturat.
Robotul pătrunde în ring prin colţul cu numărul 1 sub un unghi de 45 grade şi cu o viteză de un pătrat/s. Ciocnirile cu pereţii sunt considerate perfect elastice (robotul nu-şi pierde din viteză) iar unghiul de incidenţă este egal cu cel de reflexie.
Cerinţe
Se cere să se determine:
a) după câte secunde şi prin ce colţ al ringului va ieşi robotul;
La un concurs de robotică, în timpul prezentării, un roboţel cu corp cilindric cu diametrul de o unitate scapă de sub control şi se deplasează într-un ring de formă dreptunghiulară. Ringul este împărţit în N x M pătrate identice, cu latura de o unitate, aşezate pe N linii şi M coloane.
Robotul poate părăsi ringul numai pe la colţuri, acestea fiind numerotate de la 1 la 4, colţul cu numărul 1 fiind cel din stânga jos apoi restul fiind numerotate în sens trigonometric. Suprafaţa ringului este delimitată de exterior prin intermediul a patru pereţi despărţitori: doi pereţi “verticali” (aşezaţi de la colţul 1 la colţul 4, respectiv de la colţul 2 la colţul 3) şi doi pereţi “orizontali” (aşezaţi de la colţul 1 la colţul 2, respectiv de la colţul 3 la colţul 4), fără a bloca ieşirile, ca în desenul alăturat.
Robotul pătrunde în ring prin colţul cu numărul 1 sub un unghi de 45 grade şi cu o viteză de un pătrat/s. Ciocnirile cu pereţii sunt considerate perfect elastice (robotul nu-şi pierde din viteză) iar unghiul de incidenţă este egal cu cel de reflexie.
Cerinţe
Se cere să se determine:
a) după câte secunde şi prin ce colţ al ringului va ieşi robotul;
b) de câte ori se ciocneşte robotul de pereţii orizontali şi verticali, rezultând o schimbare de direcţie, până la ieşirea din ring.
Date de intrare
Fișierul de intrare reflex.in conține pe prima linie două numere naturale N şi M, separate printr-un singur spaţiu.
Date de ieșire
Fișierul de ieșire reflex.out va conține pe prima linie două numere naturale S și C, separate printr-un singur spațiu, S reprezentând numărul de secunde după care robotul va ieşi din ring, iar C reprezintă numărul colţului prin care acesta va ieşi. Pe a doua linie, fişierul de ieşire va conține două numere naturale H şi V, separate printr-un spaţiu, H reprezentând numărul de ciocniri cu pereţii orizontali ai ringului, iar V numărul de ciocniri cu pereţii verticali.
Restricții și precizări
3 ≤ N, M ≤ 2 000 000 000- Pentru rezolvarea corectă a unei singure cerinţe se acordă 50% din punctaj, iar pentru rezolvarea corectă a ambelor cerinţe se acordă 100% din punctaj.
Exemplul 1
reflex.in
3 6
reflex.out
11 4 4 1
Explicație

Până la ieşire se parcurg 11 pătrate, ieşirea se produce pe la colţul 4. Se produc 4 ciocniri cu pereţii orizontali şi o ciocnire cu pereţii verticali.
Exemplul 2
reflex.in
5 7
reflex.out
13 4 2 1
Explicație

Se parcurg 13 pătrate, ieşirea se face la colţul 4 şi de produc 2 ciocniri cu pereţii orizontali (în punctele a şi c respectiv o ciocnire cu pereţii verticali în punctul b).
#include<fstream>
using namespace std;
ifstream cin("reflex.in");
ofstream cout("reflex.out");
long long a , b , s , c , x , y , r , a1 , b1;
int colt[3]={2 , 4 , 3};
int main()
{
cin >> a >> b;
a1 = a-1;
b1 = b-1;
while(b1!=0){r = a1 % b1; a1 = b1; b1 = r;}
x = (b - 1) / a1;
y = (a - 1) / a1;
c = colt[y % 2 + (x % 2)*2 - 1];
s = y * (b - 1);
cout << s + 1 << " " << c << '\n' << x - 1 << " " << y - 1;
return 0;
}