题目
题目编号: 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;
}
结果
写在最后:
仅供参加。