Pe o linie orizontală se găsesc n
greieri. Ei încep să stea „capră” într-o ordine prestabilită începând cu ultimul, pe rând, până la primul. Toţi greierii care îl preced pe cel care stă „capră” sar peste acesta, în ordine.
De exemplu pentru n=4
, mai întâi stă „capră” greierul 4
și peste el sar, în ordine, 3
, 2
și 1
. Apoi stă „capră” greierul 3
și sar peste el, în ordine, 2
, 1
și 4
. Apoi stă „capră” greierul 2
și peste el sar, în ordine, 1
, 3
și 4
. Apoi stă „capră” greierul 1
și sar peste el, în ordine, 4
, 3
și 2
, și se revine la ordinea inițială.
Cerință
Scrieți un program care citește numerele naturale n
și m
și determină:
a) De câte sărituri este nevoie pentru a se ajunge la ordinea inițială?
b) Cum vor fi așezați greierii după m
sărituri?
Date de intrare
Fișierul de intrare greieri.in
conține două valori n
și m
, separate printr-un spațiu, cu semnificația din enunț.
Date de ieșire
Fișierul de ieșire greieri.out
va conține:
- pe prima linie o valoare ce reprezintă numărul de sărituri după care se revine la ordinea inițială;
- pe a doua linie numerele ce reprezintă ordinea greierilor după
m
pași.
Restricții și precizări
2 ≤ n ≤ 100000
;1 ≤ m ≤ 2000000000
;
Exemplu
greieri.in
4 5
greieri.out
12 4 3 1 2
Explicație
După cum se vede și în imagine pornind de la linia inițială 1 2 3 4
la primul pas sare greierele 3
peste 4
, la pasul 2
sare greierele 2
peste 4
, la pasul trei sare greierele 1
peste 4
la pasul patru sare greierele 2
peste 3
, iar la pasul cinci sare greierele 1
peste 3
.
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 Greieri:
#include <fstream>
using namespace std;
ifstream fin("greieri.in");
ofstream fout("greieri.out");
int main()
{
long long n, m, i, r, c, k, p, s=1;
fin>>n>>m;
fout<<n*(n-1)<<"
";
m=m%(n*(n-1));
c=m/(n-1);
r=m%(n-1);
k=n-r;
p=n-c;
for(i=n-c+1;i<=n;i++)
{
if(s==k) fout<<p<<" ";
fout<<i<<" ";
s++;
}
for(i=1;i<n-c;i++)
{
if(s==k) fout<<p<<" ";
fout<<i<<" ";
s++;
}
if(!r) fout<<p;
}
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 #1146 Greieri
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1146 Greieri 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!