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.
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
).
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Reflex:
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
long cmmdc(long a, long b)
{
while (a!=b)
{
if (a>b)
a=a-b;
else
b=b-a;
}
return a;
}
int main()
{
long n,m,N,M,CMMDC,nl,nh;
long long s;
int colt=0;
ifstream inFile;
ofstream outFile;
// citire date din fis
inFile.open("reflex.in");
outFile.open("reflex.out");
inFile >> n >> m;
N=n-1;
M=m-1;
CMMDC=cmmdc(N,M);
// CMMMC = N * M / CMMDC;
nl=N/CMMDC;
nh=M/CMMDC;
if (nl%2==0)
colt=4;
else
if (nh%2==0)
colt=2;
else
colt=3;
s = nl;
s = s * M + 1;
outFile << s << " " << colt << "
";
outFile << nh -1 << " " << nl -1 << "
";
inFile.close();
outFile.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1107 Reflex
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1107 Reflex de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!