【CCF 20200602】稀疏向量
满分代码
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n,v1,v2,x,y;
long long num=0;
cin>>n>>x>>y;
vector<pair<int,int> > a;
for(int i=0;i<x;i++){
cin>>v1>>v2;
a.emplace_back(make_pair(v1,v2));
}
//j用来限定b与a的第一个值比较的个数,
//若直接用for,不是用while会超时
int j=0;
for(int i=0;i<y;i++){
cin>>v1>>v2;
while(j<x){
if(v1<a[j].first){
break;
}
else if(v1>a[j].first){
j++;
}
else{
num+=a[j].second*v2;
j++;
}
}
}
cout<<num;
return 0;
}
超时代码
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n,v1,v2,x,y;
long long num=0;
cin>>n>>x>>y;
vector<pair<int,int> > a;
for(int i=0;i<x;i++){
cin>>v1>>v2;
a.emplace_back(make_pair(v1,v2));
}
for(int i=0;i<y;i++){
cin>>v1>>v2;
for(int j=0;j<x;j++){
if(v1<a[j].first)
break;
else if(v1==a[j].first){
num+=a[j].second*v2;
}
}
}
cout<<num;
return 0;
}
Learning
- 如果直接开数组的话需要开到10^9,装不下,所以使用动态数组vector+pair。
- emplace_back如果使用的是dev和codeblocks需要设置c++11,具体操作可问度娘。
- emplace_back()函数要比push_back()函数要快一倍。