CSP202006-2-稀疏向量(C++)

题目

题目编号: 202006-2
题目名称: 稀疏向量
时间限制: 2.0s
内存限制: 512.0MB
题目链接:202006-2-稀疏向量
题目描述:
在这里插入图片描述
输入输出格式:
在这里插入图片描述
样例输入:

10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40

样例输出:
-20
样例说明:
在这里插入图片描述
子任务:
在这里插入图片描述

代码

想要让时间控制在ms级别的话数组用n个长度即可,想要节约空间的话就如下面的代码
第一遍代码得分60,一直没找到错误,后面发现是类型的问题,因为题目里的a,b最大是10^9,相乘必然很大,所以要用long long来定义sum.

#include <iostream>
using namespace std;
int main()
{
	int n,a,b;
	cin>>n>>a>>b;
	int id[a+b+1],v[a+b+1];//存放下标和值 
	for(int i=0;i<a+b;i++) cin>>id[i]>>v[i];
	long long int sum=0;
	for(int i=0,j=0;;)
	{
		if(i>=a||j>=b) break;
		if(id[i]==id[a+j]) //下标一样,值相乘,并将结果放入sum 
		{
			sum+=v[i]*v[a+j];
			i++;
			j++;
		}
		if(id[i]>id[a+j]) j++;//a的下标> b的下标,则b下标往前走,即j++;反之i++
		if(id[i]<id[a+j]) i++;
	}
	cout<<sum<<endl;
	return 0;
 } 

结果

在这里插入图片描述

写在最后:

仅供参加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值