ccf 202006-2 稀疏向量(100分)

#include <iostream>
#include <vector>
#define MaxN 501
#define NAN 1001
using namespace std;
struct cell{
        int index, value;
        cell():index(),value(){}
        cell(int idx, int val):index(idx),value(val){}
};
//数组固定的话
vector<cell> tracU,tracV;
int main()
{
    int  n,numa,numb;
    int tidx,tval;
    long long res=0;
    cin>>n>>numa>>numb;

    for(int j=0;j<numa;j++){
            cin>>tidx>>tval;
            tracU.push_back(cell(tidx,tval));
    }
    for(int j=0;j<numb;j++){
           cin>>tidx>>tval;
           tracV.push_back(cell(tidx,tval));
   }
   //tip 原来60分代码处
    int Uidx=0,Vidx=0;
    while(1){
                int uid=tracU[Uidx].index ;
                int vid=tracV[Vidx].index;
                if(Uidx==numa||Vidx==numb)
                        break;
                if(uid <vid ){
                        Uidx++;
                }else if(vid <uid ){
                        Vidx++;
                }else{
                         res+=tracU[Uidx].value*tracV[Vidx].value;
                         Uidx++;
                         Vidx++;
                }
         }

        cout<<res<<endl;

    return 0;
}

注意:
1.结果要用long long, int 会溢出
2.注意 运算超时

笨办法(60分):
    int flag1=0,flag2=0;
    int Uidx=0,Vidx=0;
    for(int i=1;i<=n;i++){
                int ui=0,vi=0;

                if(i==tracU[Uidx].index &&Uidx<numa){
                        ui=tracU[Uidx].value;
                        Uidx++;
                        flag1=1;
                }
               if(i==tracV[Vidx].index &&Vidx<numb){
                        vi=tracV[Vidx].value;
                        Vidx++;
                        flag2=1;
                }
                if(flag1&&flag2){
                        res+=ui*vi;
                }
         }

3.有的博文提到存在n不合法的情况,我没考虑,但是也过了。母鸡啊,玄学

60->100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值