Se consideră un număr natural par N și șirul ordonat crescător X format din primele N numere naturale nenule:
X[1] = 1, X[2] = 2, …., X[N] = N.
Pozițiile numerelor din șir se pot modifica doar conform regulii A,după cum urmează:
- dacă
X[1]este număr impar, atunci se interschimbăX[1]cuX[2],X[3]cuX[4], …,X[N-1]cuX[N]; - dacă
X[1]este par atunci se interschimbăX[2]cuX[3],X[4]cuX[5], …,X[N-2]cuX[N-1], iarX[N]cuX[1].
Aplicând de R ori regula A șirului X se transformă șirul dat într-un șir “A sortat”.
Cerința
Cunoscându-se numerele naturale N, R, K și T, scrieți un program care să determine:
1) Numărul situat pe poziția K în șirul “ A sortat” obținut prin aplicarea de R ori a regulii “ A ” șirului X.
2) Predecesorul și succesorul numărului T în șirul “ A sortat” .
Date de intrare
Fişierul de intrare asort.in conține pe prima linie un număr natural P; numărul P poate avea doar valoarea 1 sau valoarea 2. A doua linie a fișierului asort.in conține în această ordine, patru numere naturale N, R, K și
T, separate prin câte un spațiu.
Date de ieșire
- Dacă valoarea lui
Peste1, atunci se va rezolva numai cerința 1). În acest caz, fişierul de ieşireasort.outva conţine pe prima linie un număr natural reprezentând numărul de pe pozițiaKdin șirulAsortat. - Dacă valoarea lui
Peste2, atunci se va rezolva numai cerința 2). În acest caz, fişierul de ieşireasort.outva conține pe prima linie două numere naturale, separate printr-un singur spațiu, reprezentând, în această ordine, predecesorul și succesorul număruluiT.
Restricții și precizări
6 < N < 1 000 000 0001 < R < 1 000 000 0001 < K < Nși1 < T < N- Dacă numărul
Teste situat pe poziția1în șirul asortat, atunci predecesorul lui este numărului de pe pozițiaN. Dacă numărulTeste situat pe pozițiaNîn șirul asortat, atunci succesorul lui este numărul de pe poziția1. - Pentru rezolvarea corectă a cerinţei 1 se acordă 50% din punctaj, iar pentru rezolvarea corectă a cerinţei 2 se acordă 50% din punctaj.
- Pentru teste în valoare de
15puncte,N ≤ 1000șiR ≤ 1000
Exemplu
asort.in
1 6 2 3 4
asort.out
1
Explicație
Se rezolvă cerința 1. N=6, R=2, K=3 și T=4
X[1] X[2] X[3] X[4] X[5] X[6]
Șirul X inițial 1 2 3 4 5 6
Șirul după prima aplicare a regulii “ A” 2 1 4 3 6 5
Șirul asortat, obținut după a doua aplicare a regulii “A” 5 4 1 6 3 2
În șirul “asortat”, pe poziția K=3 se află valoarea 1 care se va scrie pe prima linie a fișierului asort.out.
Exemplu
asort.in
2 6 2 3 4
asort.out
5 1
Explicație
Se rezolvă cerința 2. N=6, R=2, K=3 și T=4
X[1] X[2] X[3] X[4] X[5] X[6]
Șirul X inițial 1 2 3 4 5 6
Șirul după prima aplicare a regulii “A” 2 1 4 3 6 5
Șirul asortat, obținut după a doua aplicare a regulii “A” 5 4 1 6 3 2
În șirul “asortat”, predecesorul numărului T=4 este 5, iar succesorul este 1. Numerele 5 și 1 se vor scrie pe prima linie a fișierului asort.out, în această ordine.
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 Asort:
#include <fstream>
using namespace std;
ifstream f("asort.in");
ofstream g("asort.out");
long long n,r,t; int k;
int numar_poz(int k)///determin numarul situat pe pozitia k in sirul "asortat"
{
long long nrc;
if(r==0)return k;
if(r%2!=0)
if(k%2!=0) nrc=(r+k)%n;
else nrc=(n+k-r)%n;
else
if(k%2==0) nrc=(r+k)%n;
else nrc=(n+k-r)%n;
if(nrc==0)nrc=n;
return nrc;
}
int main()
{
int p;
f>>p>>n>>r>>k>>t;
r=r%n;
if(p==1)
g<<numar_poz(k)<<'\n';
else
{
int pozt;///pozitia numarului T in sirul "asortat"
int pred,succ, poz_pred, poz_succ;
if(t%2==0) pozt=(n+t-r)%n;
else pozt=(t+r)%n;
if(pozt==0)pozt=n;
if(pozt==1) { poz_pred=n; poz_succ=2; }
else
if(pozt==n){ poz_pred=n-1; poz_succ=1; }
else { poz_pred=pozt-1; poz_succ=pozt+1; }
pred=numar_poz(poz_pred);
succ=numar_poz(poz_succ);
g<<pred<<" "<<succ<<'\n';
}
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 #1709 Asort
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1709 Asort 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!