Cerința
Se consideră o listă circulară simplu înlănțuită, alocată dinamic, cu n
elemente, numere naturale citite de la tastatură; primul element al acestei liste este considerat element curent. Se citesc m
numere naturale și pentru fiecare se aplică următoarea operație:
- pentru numărul citit
x
elementul curent al listei avansează cux
poziții; - după elementul curent actual se inserează dublul său și elementul inserat devine element curent.
Să se afișeze elementele listei după cele m
operații. Afișarea începe cu elementul care a fost element curent imediat după citire.
Date de intrare
Programul citește din fișierul circularlistinsert.in
numărul n
, iar apoi cele n
elemente ale listei, separate prin spații, iar apoi m
și m
numere naturale, separate prin spații.
Date de ieșire
Programul va afișa în fișierul circularlistinsert.out
elementele listei prelucrate cu spații între ele.
Restricții și precizări
1 ≤ n ≤ 100.000
1 ≤ m ≤ 10.000
- cele
n
numere citite vor fi mai mici decât1.000
- cele
m
numere citite vor fi mai mici decât2.000
- pentru toate testele, după cele
m
inserări se vor obține în listă numere reprezentabile pe32
de biți cu semn.
Exemplu
circularlistinsert.in
8 15 8 5 15 8 6 2 16 4 4 6 8 5
circularlistinsert.out
15 8 16 5 10 15 8 16 32 6 2 16
Explicație
- inițial, elementul curent este
15
, iarx=4
. Elementul curent avansează cu4
poziții și devine8
, după el se inserează16
și acesta devine element curent. Lista devine:15 8 5 15 8 16 6 2 16
. - elementul curent este
16
șix=6
. Elementul curent avansează cu6
poziții și devine5
, după el se inserează10
și acesta devine element curent. Lista devine:15 8 5 10 15 8 16 6 2 16
.
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 Circular List Insert:
#include<bits/stdc++.h>
using namespace std;
ifstream in("circularlistinsert.in");
ofstream out("circularlistinsert.out");
list<int> v;
list<int>::iterator it,itt;
int main()
{
int n,x,m;
in>>n;
for(int i=1;i<=n;i++)
in>>x,v.push_back(x);
it=v.begin();
in>>m;
for(int i=1;i<=m;i++)
{
in>>x;
if(x>n)
x%=n;
for(int j=1;j<=x;j++)
{
if(it==v.end())
it=v.begin(),j--;
else
it++;
}
if(it==v.end())
it=v.begin();
itt=it,itt++;
if(itt!=v.begin())
v.insert(itt,*it*2);
n++,it++;
}
for(it=v.begin();it!=v.end();it++)
out<<*it<<" ";
}
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 #2844 Circular List Insert
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2844 Circular List Insert 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!