Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct element_dysku
- {
- string d2;//s
- int d3;//c
- element_dysku *next=nullptr;
- element_dysku *prev=nullptr;
- };
- class SmallerList
- {
- public:
- element_dysku *begin=nullptr;
- element_dysku *end=nullptr;
- int size=0;
- void push_back(string e2, int e3)
- {
- if(size==0)
- {
- element_dysku *a2=new element_dysku;
- a2->d2=e2;
- a2->d3=e3;
- a2->next=a2;
- a2->prev=a2;
- end=begin=a2;
- size=1;
- }
- else if(size>0)
- {
- element_dysku *a2=new element_dysku;
- a2->d2=e2;
- a2->d3=e3;
- a2->next=begin;
- begin->prev=a2;
- end->next=a2;
- a2->prev=end;
- end=a2;
- size++;
- }
- }
- void pop_front()
- {
- if(size>1)
- {
- element_dysku *a4;
- a4=begin;
- begin=begin->next;
- end->next=begin;
- begin->prev=end;
- delete a4;
- size--;
- }
- else if(size==1)
- {
- delete begin;
- begin=end=nullptr;
- size--;
- }
- }
- };
- struct listeczka
- {
- SmallerList *l1=nullptr;
- listeczka *next=nullptr;
- listeczka *prev=nullptr;
- };
- class BiggerList
- {
- public:
- listeczka *begin=nullptr;
- listeczka *end=nullptr;
- int SizeBig=0;
- void push_back(SmallerList *l)
- {
- if(SizeBig==0)
- {
- listeczka *a2=new listeczka;
- a2->l1=l;
- a2->next=a2;
- a2->prev=a2;
- begin = end = a2;
- SizeBig=1;
- }
- else
- {
- listeczka *a3=new listeczka;
- a3->l1=l;
- end->next=a3;
- a3->prev=end;
- a3->next=begin;
- begin->prev=a3;
- end=a3;
- SizeBig++;
- }
- }
- void pop_front()
- {
- if(SizeBig>1)
- {
- listeczka *a4;
- a4=begin;
- begin=begin->next;
- begin->prev=end;
- end->next=begin;
- delete a4;
- SizeBig--;
- }
- else if(SizeBig==1)
- {
- begin=end=nullptr;
- SizeBig--;
- }
- }
- };
- void funkcja(BiggerList *l3, int *tab_h, int *tab_l, int l, int h, int sek)
- {
- listeczka *k=l3->begin;
- while(l3->SizeBig>0 && sek<h && l>0)
- {
- bool f1=true;
- while(f1)
- {
- f1=false;
- if(l==0 || l3->SizeBig==0)
- return;
- int suma=0;
- for(int size=0; size<l3->SizeBig; size++)
- {
- suma+=l3->begin->l1->begin->d3;
- if(l3->begin->next->l1->size!=0)
- l3->begin=l3->begin->next;
- }
- for(int i=0; i<l; i++)
- {
- if(tab_l[i]==suma)
- {
- tab_l[i]=0;
- f1=1;
- cout<<suma<<" ";
- for(int size=0; size<l3->SizeBig;)
- {
- cout<<l3->begin->l1->begin->d2;
- l3->begin->l1->pop_front();
- if(l3->begin->l1->size==0)
- {
- l3->pop_front();
- }
- else
- {
- size++;
- l3->begin=l3->begin->next;
- }
- }
- cout << endl;
- }
- }
- }
- int sek1;
- int sek2;
- sek1=tab_h[2*sek];
- sek2=tab_h[(2*sek)+1];
- if(l==0 || l3->SizeBig==0 || sek==h)
- return;
- sek++;
- if(sek1<0)
- {
- sek1=abs(sek1);
- sek1=sek1%l3->SizeBig;
- for(int i=0; i<sek1; i++)
- {
- k=k->prev;
- }
- }
- else if(sek1>0)
- {
- sek1=sek1%l3->SizeBig;
- for(int i=0; i<sek1; i++)
- {
- k=k->next;
- }
- }
- if(sek2<0)
- {
- sek2=abs(sek1);
- sek2=sek2%k->l1->size;
- for(int i=0; i<sek2; i++)
- {
- k->l1->begin=k->l1->begin->prev;
- }
- }
- else if(sek2>0)
- {
- sek2=sek2%k->l1->size;
- for(int i=0; i<sek2; i++)
- {
- k->l1->begin=k->l1->begin->next;
- }
- }
- }
- }
- int main()
- {
- int How_many_disks;
- int How_many_Indisk;
- int How_many_sum;
- int How_many_seq;
- string forString;
- int ForInt;
- cin>>How_many_disks;
- BiggerList* BigList =new BiggerList;
- for(int i=0; i<How_many_disks; i++)
- {
- cin>>How_many_Indisk;
- SmallerList *mniejsza=new SmallerList;
- for(int j=0; j<How_many_Indisk; j++)
- {
- cin>>forString>>ForInt;
- mniejsza->push_back(forString,ForInt);
- }
- BigList->push_back(mniejsza);
- }
- cin>>How_many_sum;
- int *SumArr=new int[How_many_sum];
- for(int i=0; i<How_many_sum; i++)
- {
- cin>>SumArr[i];
- }
- cin>>How_many_seq;
- int *SeqArr=new int[2*How_many_seq];
- for(int i=0; i<How_many_seq; i++)
- {
- cin>>SeqArr[2*i]>>SeqArr[(2*i)+1];
- }
- funkcja(BigList, SeqArr, SumArr, How_many_sum, How_many_seq, 0);
- /*cout << endl;
- for(int i=0; i<2*n; i++)
- {
- cout << l3->begin->l1->size;
- l3->begin=l3->begin->next;
- }*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement