Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type llist = ^element;
- element = record
- e, k: integer;
- next: llist;
- end;
- var input, output: text;
- p, q: llist;
- n, e, k, i, count: longint;
- procedure add(e, k: longint; var list: llist);
- var temp: llist;
- Begin
- new(temp);
- temp^.next := list;
- temp^.e := e;
- temp^.k := k;
- list := temp;
- end;
- procedure writeList(list: llist);
- Begin
- while list <> nil do
- Begin
- if list^.k <> 0 then Begin write(output, list^.e, ' ', list^.k); writeln(output); end;
- list := list^.next;
- end;
- end;
- procedure searchAdd(var p, q: llist);
- var tempP, tempQ, destr: llist;
- Begin
- tempP := p;
- while tempP <> nil do
- Begin
- tempQ := q;
- while tempQ <> nil do
- Begin
- if tempP^.e = tempQ^.e then
- Begin
- tempP^.k := tempP^.k + tempQ^.k;
- destr := tempQ^.next;
- if (tempQ = q) and (q^.next = nil) then
- Begin
- destr := q;
- q := nil;
- dispose(destr);
- end
- else if destr <> nil then
- Begin
- tempQ^.e := tempQ^.next^.e;
- tempQ^.k := tempQ^.next^.k;
- tempQ^.next := tempQ^.next^.next;
- dispose(destr);
- end
- else if destr = nil then
- Begin
- tempQ := q;
- while tempQ^.next^.next <> nil do
- tempQ := tempQ^.next;
- destr := tempQ^.next;
- tempQ^.next := nil;
- dispose(destr);
- end;
- break;
- end;
- tempQ := tempQ^.next;
- end;
- tempP := tempP^.next;
- end;
- tempP := p;
- if q <> nil then
- Begin
- while tempP^.next <> nil do
- tempP := tempP^.next;
- tempP^.next := q;
- end;
- end;
- procedure sortList(var list: llist);
- var temp: llist;
- change : boolean;
- numTemp : longint;
- Begin
- count := 0;
- repeat
- temp := list;
- change := False;
- while temp^.next <> nil do
- Begin
- if temp^.e < temp^.next^.e then
- Begin
- numTemp := temp^.e;
- temp^.e := temp^.next^.e;
- temp^.next^.e := numTemp;
- numTemp := temp^.k;
- temp^.k := temp^.next^.k;
- temp^.next^.k := numTemp;
- change := True;
- end;
- temp := temp^.next;
- end;
- until not change;
- temp := p;
- while temp <> nil do
- Begin
- if temp^.k <> 0 then count := count + 1;
- temp := temp^.next;
- end;
- writeln(output, count);
- end;
- Begin
- assign(input, 'polynomy.in'); reset(input);
- assign(output, 'polynomy.out'); rewrite(output);
- p := nil;
- q := nil;
- readln(input, n);
- for i := 1 to n do
- Begin
- read(input, e);
- readln(input, k);
- add(e, k, p);
- end;
- readln(input, n);
- for i := 1 to n do
- Begin
- read(input, e);
- readln(input, k);
- add(e, k, q);
- end;
- searchAdd(p, q);
- sortList(p);
- writeList(p);
- close(input); close(output);
- end.
Add Comment
Please, Sign In to add comment