问题 B: 多项式相加
"
时间限制 1 秒/Second(s) 内存限制 128 兆字节/Megabyte(s)
提交总数 679 正确数量 468
裁判形式 标准裁判/Standard Judge 我的状态 继续加油
难度 三级 分类标签 离散化
题目描述
一条单链表可以表示一个一元多项式,每个节点包含三个域:指数、系数和后继节点(指针或引用)。
表示多项式3X4-6X2+5X-10的单链表如图所示。给定两个多项式,实现两个多项式相加算法。
输入
第一行输入包含两个整数m,n
后续为m行和n行数据
m,n分别代表两个多项式的项数
后续每一行代表多项式的项,包含a,b两个数据,表示该项的系数和指数。
输出
从较高指数到较低指数,依次输出求得的和。
每行一项,格式与输入相同,但无需输出项数,系数为0的项也不输出。
样例输入复制
2 3
1 2
1 1
2 2
1 1
2 0
样例输出复制
3 2
2 1
2 0
package com.anke;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
/**
*
- @author ma
*/
public class bdemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin= new Scanner(System.in);
Map<Integer, Integer> map = new TreeMap<Integer, Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1); // 降序排列,默认排序是升序排列
}
});
int m=cin.nextInt();
int n=cin.nextInt();
int k=m+n;
while(k--!=0){
int a=cin.nextInt();
int b=cin.nextInt();
if(map.containsKey(b)){
map.put(b,map.get(b)+a);
}
else{
map.put(b,a);
}
}
for (Integer key : map.keySet()) {
if(map.get(key)==0)//注意限条件,需要排除一下
continue;
System.out.println(map.get(key)+" "+key);
}
}
}
这是一道关于实现多项式相加的编程题,要求使用单链表表示一元多项式,并给出输入输出格式及样例。题目描述中给出了多项式链表的表示方式,以及如何处理两个多项式的相加,输出结果需要按指数降序排列,系数为0的项不输出。
5719

被折叠的 条评论
为什么被折叠?



