主题:[讨论]关于合并同类项的问题
【问题描述】
给出两个多项式y1和y2,请你合并同类项。
【输入】
输入数据共两行,每行代表一个多项式。每个多项式按如下形式给出:
a1 b1 a2 b2 … ai bi … an bn
其中a1~an均为整数,表示此多项式n项的系数,b1~bn均为整数,表示此多项式n项的指数。数字与数字之间用一个空格隔开,最后一个数字之后没有空格。
【输出】
输出数据仅一行,表示合并后的多项式,格式同输入形式,按指数递减排列。
【样例】
输入
3 7 5 6 -4 5 -3 2 -8 1 -2 0
9 12 -6 8 -5 7 -5 6 1 4 -8 3 6 2 7 1 3 0
输出
9 12 -6 8 -2 7 -4 5 1 4 -8 3 3 2 -1 1 1 0
这个题目是sznoi上的,题目的网址在这:[url=http://sznoi.cn/oj/ShowProblem?Problemid=c001]http://sznoi.cn/oj/ShowProblem?problemid=c001[/url]
于是问题就来了.
以下为我编的程序.
uses crt;
var i,j,a,b,k,p:integer;
c,d:array[1..1000]of integer;
function find(x:integer):integer;
var i:integer;
begin
for i:=1 to k do if x=c[i] then exit(i);
find:=0
end;
begin
clrscr;
k:=0;
for i:=1 to 2 do begin
while not(eoln) do begin
read(a,b);
p:=find(b);
if p<>0 then inc(d[p],a) else begin
inc(k);
c[k]:=b;
d[k]:=a
end
end;
readln
end;
for i:=1 to k-1 do
for j:=i+1 to k do
if c[i]<c[j] then begin
c[i]:=c[i]+c[j];c[j]:=c[i]-c[j];c[i]:=c[i]-c[j];
d[i]:=d[i]+d[j];d[j]:=d[i]-d[j];d[i]:=d[i]-d[j]
end;
for i:=1 to k do if d[i]<>0 then write(d[i],' ',c[i],' ');
readln
end.
在SZNOI的测试里面总是只可以过九个点,最后一个测试点会显示以下错误信息:
*** 第 10 点 (10%):WA
你的程序未完成所有输出!!(line:1)
只输出了 0 行!
可能的原因
* 未用读取全部测试数据的方式,(单文件,多数据)。
* 程序没有充分考虑边界值而提前中止
这种情况该怎么解决?
给出两个多项式y1和y2,请你合并同类项。
【输入】
输入数据共两行,每行代表一个多项式。每个多项式按如下形式给出:
a1 b1 a2 b2 … ai bi … an bn
其中a1~an均为整数,表示此多项式n项的系数,b1~bn均为整数,表示此多项式n项的指数。数字与数字之间用一个空格隔开,最后一个数字之后没有空格。
【输出】
输出数据仅一行,表示合并后的多项式,格式同输入形式,按指数递减排列。
【样例】
输入
3 7 5 6 -4 5 -3 2 -8 1 -2 0
9 12 -6 8 -5 7 -5 6 1 4 -8 3 6 2 7 1 3 0
输出
9 12 -6 8 -2 7 -4 5 1 4 -8 3 3 2 -1 1 1 0
这个题目是sznoi上的,题目的网址在这:[url=http://sznoi.cn/oj/ShowProblem?Problemid=c001]http://sznoi.cn/oj/ShowProblem?problemid=c001[/url]
于是问题就来了.
以下为我编的程序.
uses crt;
var i,j,a,b,k,p:integer;
c,d:array[1..1000]of integer;
function find(x:integer):integer;
var i:integer;
begin
for i:=1 to k do if x=c[i] then exit(i);
find:=0
end;
begin
clrscr;
k:=0;
for i:=1 to 2 do begin
while not(eoln) do begin
read(a,b);
p:=find(b);
if p<>0 then inc(d[p],a) else begin
inc(k);
c[k]:=b;
d[k]:=a
end
end;
readln
end;
for i:=1 to k-1 do
for j:=i+1 to k do
if c[i]<c[j] then begin
c[i]:=c[i]+c[j];c[j]:=c[i]-c[j];c[i]:=c[i]-c[j];
d[i]:=d[i]+d[j];d[j]:=d[i]-d[j];d[i]:=d[i]-d[j]
end;
for i:=1 to k do if d[i]<>0 then write(d[i],' ',c[i],' ');
readln
end.
在SZNOI的测试里面总是只可以过九个点,最后一个测试点会显示以下错误信息:
*** 第 10 点 (10%):WA
你的程序未完成所有输出!!(line:1)
只输出了 0 行!
可能的原因
* 未用读取全部测试数据的方式,(单文件,多数据)。
* 程序没有充分考虑边界值而提前中止
这种情况该怎么解决?