题目链接:CSP 202006-2
本题涉及的数据维度比较大,所以单纯的遍历累加可能会导致超时或者运行错误
运行错误(60分)
#include<iostream>
#include<algorithm>
#include<map>
#define N 100000
using namespace std;
int main()
{
int n,a,b;
int uv=0;
//int vec[N+5];
cin >> n >> a >> b;
vector<int> u(n,0),v(n,0);
for(int i=0;i<a;i++){
int x,y;
cin >> x >> y;
u[x]=y;
}
for(int j=0;j<b;j++){
int x,y;
cin >> x >> y;
v[x]=y;
}
for(int k=0;k<n;k++){
uv=uv+u[k]*v[k];
}
cout << uv << endl;
return 0;
}
结果用int型 明显不够
满分代码:
#include<iostream>
#include<algorithm>
#include<map>
#define N 100000
using namespace std;
/*
测试样例:
10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40
*/
/*当map内元素值为int类型或常量时,默认值为0。
当为String类型时,默认值不明,不显示。
*/
int main()
{
int n,a,b;
long long uv=0;//a,b<=10(5)~10(8) int,long会越界
cin >> n >> a >> b;
map<int,int> mp;
for(int i=0;i<a;i++){
int x,y;
cin >> x >> y;
mp[x]=y;
}
for(int j=0;j<b;j++){
int x,y;
cin >> x >> y;
uv+=y*mp[x];
}
cout << uv << endl;
return 0;
}
将结果改为long long型,并利用STL的map数据结构的默认值特点。达到简化运算的目的。
(当map内元素值为int类型或常量时,默认值为0。
当为String类型时,默认值不明,不显示。)