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
xelementul curent al listei avansează cuxpoziț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.0001 ≤ m ≤ 10.000- cele
nnumere citite vor fi mai mici decât1.000 - cele
mnumere citite vor fi mai mici decât2.000 - pentru toate testele, după cele
minserări se vor obține în listă numere reprezentabile pe32de 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ă cu4poziț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ă cu6poziț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!