第19 次 CCF CSP 认证 202006-2 稀疏向量

#include
using namespace std;
struct xiangliang
{
 long index;
 long value; 
};
int main()
{//n维数,a,b表示两个向量所含非零值的个数 
 long n,a,b;
 cin>>n>>a>>b;//维数从1开始 
 xiangliang u[a+1],v[b+1];
 for(long i=1;i<=a;i++)
 {
  cin>>u[i].index>>u[i].value;
 }
 for(long i=1;i<=b;i++)
 {
  cin>>v[i].index>>v[i].value;
 }  
 long long sum=0;
 int i=0,j=0;
 while(i<a&&j<b)
 {
  if(u[i].index>v[j].index)j++;
  else if(u[i].index==v[j].index)
  {
   sum+=u[i].value*v[j].value;
   i++;j++;
  }
  else if(u[i].index<v[j].index)i++;
  
 }
 cout<<sum;
 return 0; 
} 

最开始用双重循环求sum,超时了,只有30分
改进以后的单循环可以满分

你可能感兴趣的:(第19 次 CCF CSP 认证 202006-2 稀疏向量)