解法一:双指针
双指针遍历两个多项式,按照指数大小求和加入最终结果 ans 。注意处理和为0的情况和输出格式。
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;public class Main {private static float EXP = 1e-5f;public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String[] input = reader.readLine().split(" ");int lenA = Integer.parseInt(input[0]);ArrayList<Item> A = new ArrayList<>(lenA);for (int i = 1; i <= lenA; ++i) {int exponent = Integer.parseInt(input[i * 2 - 1]);float coef = Float.parseFloat(input[i * 2]);A.add(new Item(exponent, coef));}input = reader.readLine().split(" ");int lenB = Integer.parseInt(input[0]);ArrayList<Item> B = new ArrayList<>(lenB);for (int i = 1; i <= lenB; ++i) {int exponent = Integer.parseInt(input[i * 2 - 1]);float coef = Float.parseFloat(input[i * 2]);B.add(new Item(exponent, coef));}ArrayList<Item> ans = new ArrayList<>(lenA);int p1 = 0, p2 = 0;while ((p1 < lenA) && (p2 < lenB)) {int flag = A.get(p1).exponent - B.get(p2).exponent;if (flag > 0) {ans.add(A.get(p1++));} else if (flag < 0) {ans.add(B.get(p2++));} else {float sum = A.get(p1).coef + B.get(p2).coef;if (!equalZero(sum)) {ans.add(new Item(A.get(p1).exponent, sum));}++p1;++p2;}}while (p1 < lenA) {if (!equalZero(A.get(p1).coef)) {ans.add(A.get(p1++));}}while (p2 < lenB) {if (!equalZero(B.get(p2).coef)) {ans.add(B.get(p2++));}}System.out.print(ans.size());for (Item i : ans) {System.out.printf(" %d %.1f", i.exponent, i.coef);}}private static boolean equalZero(float a) {if (Math.abs(a) < EXP) {return true;}return false;}}class Item {int exponent;float coef;Item() {coef = 0.0f;}Item(int exponent, float coef) {this.exponent = exponent;this.coef = coef;}}
