解题思路:
这题和1002有点像,但是不是+,而是乘。也考虑用map来存储。exp(指数)和coe(系数)刚好组成<Integer, Double>的键值对,指数Key是不能重复的,刚好符合多项式指数的特性,更新还方便。只是最后用TreeMap来存储结果,需要在初始化TreeMap的时候倒序排序,可以用Comparator.reverseOrder()。
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int k1 = input.nextInt();
Map<Integer, Double> map1 = new HashMap<>();
Map<Integer, Double> map2 = new TreeMap<>(Comparator.reverseOrder());
for(int i=0; i<k1; i++) {
int exp = input.nextInt();
double coe = input.nextDouble();
if(!map1.containsKey(exp))
map1.put(exp, coe);
else
map1.put(exp, map1.get(exp) + coe);
}
Set<Entry<Integer, Double>> entrySet = map1.entrySet();
int k2 = input.nextInt();
for(int i=0; i<k2; i++) {
int exp = input.nextInt();
double coe = input.nextDouble();
for(Entry<Integer, Double> entry: entrySet) {
int newExp = entry.getKey() + exp;
double newCoe = entry.getValue() * coe;
if(!map2.containsKey(newExp))
map2.put(newExp, newCoe);
else
map2.put(newExp, map2.get(newExp) + newCoe);
}
}
int size = map2.size();
entrySet = map2.entrySet();
String output = "";
for(Entry<Integer, Double> entry: entrySet){
if(entry.getValue().equals(Double.valueOf(0)))
size--;
else
output += String.format(" %d %.1f", entry.getKey(), entry.getValue());
}
System.out.print(size + output);
input.close();
}
}