CCF准备日记——202006-2
题目编号:202006-2
题目名称:稀疏向量
使用语言:Java(Eclipese)
题目描述:
我的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();//两个向量维度,好像该变量没有用
int a = scanner.nextInt();//第一个向量非零个数
int b = scanner.nextInt();//第二个向量非零个数
int[][] u = new int[a][2];
int[][] v = new int[b][2];
int i = 0;//循环变量
int t1 = 0;//临时变量
int t2 = 0;//临时变量
for(i=0;i<a;i++) {
t1 = scanner.nextInt();
t2 = scanner.nextInt();
u[i][0] = t1;
u[i][1] = t2;
}
for(i=0;i<b;i++) {
t1 = scanner.nextInt();
t2 = scanner.nextInt();
v[i][0] = t1;
v[i][1] = t2;
}
long sum = 0;//用Int可能会越界,因此使用了Long
long temp = 0;//用Int可能会越界,因此使用了Long
int tu = 0;//u的指示变量
int tv = 0;//v的指示变量
while(tu<=(a-1) && tv<=(b-1)){
if(u[tu][0] == v[tv][0]) {
temp = u[tu][1] * v[tv][1];
sum += temp;
tu++;
tv++;
}else {
if(u[tu][0] > v[tv][0]) {
if(tv<(b-1))
tv++;
else//如果v到头了并且v还小,那么肯定无法再维度匹配求和了
break;
}else{
if(tu<(a-1))
tu++;
else//如果u到头了并且u还小,那么肯定无法再维度匹配求和了
break;
}
}
}
System.out.println(sum);
}
}