CCF准备日记——202006-2

这篇博客介绍了如何使用Java编程实现两个稀疏向量的匹配求和。程序通过读取输入的向量非零元素及其位置,进行逐维度比较并累加相同位置的乘积,直至所有能匹配的元素都处理完毕。博客强调了在处理过程中防止整数溢出的问题。
摘要由CSDN通过智能技术生成

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);
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值