>n>>a>>b; int y"/>

ccf-csp认证 稀疏向量 202006-2

   日期:2020-09-13     浏览:128    评论:0    
核心提示:稀疏向量队列法#include #include using namespace std;#define _for(i,a,b) for(int i=a;i>n>>a>>b; int y

题目

队列法

因为是输入是有顺序的,所以直接用“先进先出”的队列就行;
如果是无序的,那么只能用unordered_map了

#include <iostream>
#include <queue>

using namespace std;
#define _for(i,a,b) for(int i=a;i<b;i++)
struct point { 
	int id;
	int e;
};
int main( ) { 
// freopen("in.txt","r",stdin);
	ios::sync_with_stdio(false);
	int n,a,b;
	cin>>n>>a>>b;
	int y;
	int x;
	queue<point> q;
	_for(i,0,a) { 
		cin>>x>>y;
		q.push({ x,y});
	}
	
	long long int sum=0;
	_for(i,0,b) { 
		cin>>x>>y;
		while(!q.empty()) { 
			int i = q.front().id , j = x;
			if(i < j) { 
				q.pop();
			} else if (i == j) { 
				sum+=(q.front().e * y);
				q.pop();
				break;
			} else { 
				break;
			}
		}
	}
	cout<<sum;
	return 0;
}

哈希表法

//这是一道简单题
#include<iostream>
#include<map>
#define _for(i,a,b) for(int i=a;i<b;i++)
using namespace std;
int main()
{ 
	ios::sync_with_stdio(false);
	int n, a, b;//维数,a,b向量的非零值个数
	cin >> n >> a >> b;
	map<int, int> mp;
	int pos, val;
	long long int sum = 0; //最终结果
	_for(i,0,a) { 
		cin >> pos;
		cin >> val;
		mp[pos] = val;
	}
	_for(i,0,b) { 
		cin >> pos;
		cin >> val;
		if (mp[pos] != 0)
			sum+= (mp[pos] * val);
	}
	cout << sum<< endl;
	return 0;
}

快的是队列法,空间也少

测试样例

10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 50
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服