202006-2 稀疏向量
阿新 • • 發佈:2021-02-03
技術標籤:考證
202006-2 稀疏向量
因為N太大了,所以得用map來存一下,同時可以記錄一下出現過哪些index,記錄一下,然後遍歷map,如果同一個位置,兩個向量在這裡都非0.那麼項乘加到結果上。
#include <stdio.h>
#include <iostream>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
void pt(){ cout<<'\n';}
template<class H, class ... T> void pt(H h,T... t){ cout<<" "<<h; pt(t...);}
int N,w1,w2;
struct node{
ll a,b;
};
const int maxn = 1e6+10;
map<ll,node> mp;
ll idx[maxn],tail;
int main(){
cin>>N>>w1>> w2;
for(int i = 1;i<=w1;i++){
ll t,v;scanf("%lld %lld",&t,&v);
mp[t].a = v;
idx[++tail] = t;
}
for(int i = 1;i<=w2;i++){
ll t,v;scanf("%lld %lld",&t,&v);
mp[t].b = v;
idx[++tail] = t;
}
sort (idx+1,idx+tail+1);
tail = unique(idx+1,idx+tail+1) - idx-1;
ll ans = 0;
for(int i = 1;i<=tail;i++){
ans += mp[idx[i]].a * mp[idx[i]].b;
}
printf("%lld\n",ans);
return 0;
}