Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- using namespace std;
- struct Pair {
- int value;
- int pos;
- };
- typedef vector<Pair> Com_Vec;
- Com_Vec sum(const Com_Vec& v1, const Com_Vec& v2){
- int a, b, s1 = v1.size(), s2 = v2.size();
- a = b = 0;
- Com_Vec v;
- while(a < s1 or b < s2){
- Pair p;
- if(a < s1 and b < s1){
- Pair p1 = v1[a], p2 = v2[b];
- if(p1.pos == p2.pos){
- p.pos = p1.pos;
- p.value = p1.value + p2.value;
- ++a;
- ++b;
- }
- else if(p1.pos < p2.pos){
- p.pos = p1.pos;
- p.value = p1.value;
- ++a;
- }
- else if(p2.pos < p1.pos){
- p.pos = p2.pos;
- p.value = p2.value;
- ++b;
- }
- }
- else if(a < s1){
- Pair p1 = v1[a];
- p.pos = p1.pos;
- p.value = p1.value;
- ++a;
- }
- else if(b < s2){
- Pair p2 = v2[b];
- p.pos = p2.pos;
- p.value = p2.value;
- ++b;
- }
- if(p.value != 0) v.push_back(p);
- }
- return v;
- }
- void p(const Com_Vec& v){
- int l = v.size();
- cout << l;
- for(int i = 0; i < l; ++i){
- cout << " " << v[i].value << ";" << v[i].pos;
- }
- cout << endl;
- }
- void read(Com_Vec& v){
- int n;
- cin >> n;
- Com_Vec cv(n);
- int i = 0;
- if(n == 0){
- Pair r;
- r.pos = 1;
- r.value = 0;
- cv.push_back(r);
- }
- while(n--){
- char c;
- cin >> cv[i].value >> c >> cv[i].pos;
- ++i;
- }
- v = cv;
- }
- int main() {
- int k;
- cin >> k;
- vector< Com_Vec> vc(2);
- while(k--){
- read(vc[0]);
- read(vc[1]);
- Com_Vec v = sum(vc[0], vc[1]);
- p(v);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement