解法一:模拟

模拟多项式乘法的运算过程,注意系数为0的项。

  1. import java.io.*;
  2. public class Main {
  3. private static float[] A = new float[1005];
  4. private static float[] B = new float[1005];
  5. private static float EXP = 1e-5f;
  6. public static void main(String[] args) throws IOException {
  7. StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
  8. PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
  9. float[] A = new float[1005];
  10. float[] B = new float[1005];
  11. float[] C = new float[2010];
  12. read(in, A);
  13. read(in, B);
  14. for (int i = 0; i < A.length; ++i) {
  15. for (int j = 0; j < B.length; ++j) {
  16. C[i + j] += A[i] * B[j];
  17. }
  18. }
  19. int ans = 0;
  20. for (float v : C) {
  21. if (!equalZero(v)) {
  22. ++ans;
  23. }
  24. }
  25. out.print(ans);
  26. for (int i = C.length - 1; i >= 0; --i) {
  27. if (!equalZero(C[i])) {
  28. out.printf(" %d %.1f", i, C[i]);
  29. }
  30. }
  31. out.println();
  32. out.flush();
  33. }
  34. private static boolean equalZero(float f) {
  35. if (Math.abs(f) < EXP) {
  36. return true;
  37. }
  38. return false;
  39. }
  40. private static void read(StreamTokenizer in, float[] arr) throws IOException {
  41. in.nextToken();
  42. int len = (int) in.nval;
  43. for (int i = 0; i < len; ++i) {
  44. in.nextToken();
  45. int exponent = (int) in.nval;
  46. in.nextToken();
  47. float coef = (float) in.nval;
  48. arr[exponent] = coef;
  49. }
  50. }
  51. }