CCF 202006-2 稀疏向量(C++)

202006-2 稀疏向量

试题编号: 202006-2
试题名称: 稀疏向量
时间限制: 2.0s
内存限制: 512.0MB
问题描述:CCF 202006-2 稀疏向量(C++)_第1张图片

CCF 202006-2 稀疏向量(C++)_第2张图片

解题过程

一开始用了n+1大小的数组打算直接暴力解,然后用了a+b大小的结构体数组想着缩小数据大小应该能过,结果都卡在60分运行错误。
接着使用了vector容器直接输入a+b个数据然后排序来求解,结果是30分运行超时。
运行错误可能是由于a+b大小不确定导致当a+b较大时,无法直接按照这样定义数组。
运行超时我觉得也是一样的原因,即使使用sort排序也还是会时间过长。
(照着AC代码跑才刚好2s)

AC代码
#include
#include
using namespace std;
int main()
{
     
	int n,a,b;
	cin>>n>>a>>b;
	/*pair打包两个整型,first和second访问数据*/
	vector < pair<int,int> > u,v;//vector定义 
	int index,value;
	for(int i=0;i<a+b;i++)
	{
     
		cin>>index>>value;
		if(i<a)
			u.push_back({
     index,value});//vector的基本入栈用法 
		else
			v.push_back({
     index,value});
	}
	long long int res=0;//求内积相乘可能超过int范围 
	int i=0,j=0;
	while(i<a&&j<b)
	{
     
		if(u[i].first==v[j].first)
		{
     
			res+=u[i].second*v[j].second;
			i++;
			j++;
		}
		else if(u[i].first<v[j].first)
			i++;
		else
			j++;
	}
	cout<<res;
	return 0;
}

你可能感兴趣的:(c++,数据结构,算法,c语言,csp)