CSP 202006-2 稀疏向量(100)
思路:该问题数据两过大,不能将数据从0到n遍历相加(n<10^9)。我的思路是用map存第一个稀疏向量,然后再输入第二组向量时直接进行结果的累加计算。
本题提交了两次,第一次90分超时,第二次原样代码提交,100分,时间刚好2.0s。
不知道怎样才能有更快的方法。
坑点:
- 要注意这种卡时间的问题不要用万能头,否则会极大拖慢运行速度。
- 结果要用long long来存储。
- 同样的代码也有不同的分数?
#include<map>
#include<cstdio>
using namespace std;
int n,a,b,x,y;
long long int ans = 0;
map<int,int> mp;
int main(){
scanf("%d%d%d",&n,&a,&b);
for(int i = 0;i<a;i++){
scanf("%d%d",&x,&y);
mp[x]=y;
}
for(int i = 0;i<b;i++){
scanf("%d%d",&x,&y);
ans+=mp[x]*y;
}
printf("%lld\n",ans);
return 0;
}