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!