- 老师答疑区
- 帖子详情
02-线性结构2 一元多项式的乘法与加法运算 最后一项测试用例?
yzylining
发表于2018年04月13日
<p><code class="brush:java;toolbar:false" >import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] p1 = readArray(br);
int[][] p2 = readArray(br);
int[][] multiResult = multiPolynomial(p1, p2);
printResult(multiResult);
int[][] addResult = addPolynomial(p1, p2);
printResult(addResult);
}
private static int[][] multiPolynomial(int[][] p1, int[][] p2) {
int n = p1.length;
int m = p2.length;
int[][] multiResult = new int[0][2];
int[][] temp = new int[m][2];
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
temp[j][0] = p1[i][0] * p2[j][0];
temp[j][1] = p1[i][1] + p2[j][1];
}
multiResult = addPolynomial(multiResult, temp);
}
return multiResult;
}
}
private static int[][] readArray(BufferedReader br) {
String[] nums = new String[0];
try {
nums = br.readLine().split("\\s+");
} catch (IOException e) {
e.printStackTrace();
}
int n = Integer.parseInt(nums[0]);
int[][] p = new int[n][2];
int i;
for (i = 0; i < n; i++) {
p[i][0] = Integer.parseInt(nums[2 * i + 1]);
p[i][1] = Integer.parseInt(nums[2 * (i + 1)]);
}
return p;
}
private static int[][] addPolynomial(int[][] p1, int[][] p2) {
int n = p1.length;
int m = p2.length;
int[][] addResult = new int[n + m][2];
int i = 0, j = 0, k = 0;
while (i < n && j < m) {
if (p1[i][1] < p2[j][1]) {
addResult[k][0] = p2[j][0];
addResult[k][1] = p2[j][1];
j++;
k++;
} else if (p1[i][1] > p2[j][1]) {
addResult[k][0] = p1[i][0];
addResult[k][1] = p1[i][1];
i++;
k++;
} else {
int sum = p1[i][0] + p2[j][0];
if (sum == 0){
i++;
j++;
}else {
addResult[k][0] = sum;
addResult[k][1] = p1[i][1];
i++;
j++;
k++;
}
}
}
while (i < n) {
addResult[k][0] = p1[i][0];
addResult[k][1] = p1[i][1];
i++;
k++;
}
while (j < m) {
addResult[k][0] = p2[j][0];
addResult[k][1] = p2[j][1];
j += 1;
k += 1;
}
return addResult;
}
private static void printResult(int[][] result) {
StringBuilder sb = new StringBuilder();
if (result[0][0] == 0){
System.out.println("0 0");
}else{
for (int[] aResult : result) {
if (aResult[0] == 0) {
break;
}
sb.append(aResult[0]).append(" ").append(aResult[1]).append(" ");
}
System.out.println(sb.toString().trim());
}
}</code>最后一项测试用