CCF CSP202006-2 稀疏向量

leihao-lester發表於2020-12-09

CCF CSP202006-2 稀疏向量

題目描述

在這裡插入圖片描述
在這裡插入圖片描述

要點分析

此題目的要點在於如何遍歷兩個稀疏向量,使之對應非零維數相乘後相加

#include<bits/stdc++.h>
using namespace std;
struct Point
{
	int x,y;
};
int n,a,b;
long long ans=0;//注意此處應該有long long 不然會溢位 
int main()
{
	cin>>n>>a>>b;
	struct Point p1[a],p2[b];
	for(int i=0;i<a;i++)
	{
		cin>>p1[i].x>>p1[i].y;
	}
	for(int i=0;i<b;i++)
	{
		cin>>p2[i].x>>p2[i].y;
	}
	int j=0;
	int k=0;
	//對於此處的while迴圈需要特殊設計,應該採用類似於合併連結串列時所用到的遍歷方法 
	//如果採用i從1到n迴圈一遍則會超時 
	while(j<a&&k<b)
	{
		if(p1[j].x<p2[k].x)j++;
		else if(p1[j].x==p2[k].x)
		{
			ans+=p1[j].y*p2[k].y;
			j++;
			k++;
		}
		else k++;
	}
	cout<<ans<<endl;
}

相關文章