这是ccf2020年6月份的第二题稀疏向量,我想知道用c语言怎么写,最好能用一种独特的方法,我把题目放在下面了

这是题目,由于不能复制我就把图片放上来了,我把样例输入复制上来方便你们测试
10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40

img

img

#include<bits/stdc++.h>
const int maxn=1e6;
struct node{
    int index;
    int value;
};
node u[maxn],v[maxn];

bool cmp(node x,node y){
    return x.index<y.index;
}

int main(){
    int n,a,b;
    scanf("%d %d %d",&n,&a,&b);
    for(int i=0;i<a;i++) scanf("%d %d",&u[i].index,&u[i].value);
    sort(u,u+a,cmp);
    for(int i=0;i<b;i++) scanf("%d %d",&v[i].index,&v[i].value);

    sort(v,v+b,cmp);
    long long ans=0;
    int i=0,j=0;
    while(i != a && j!=b)
    {
        if(u[i].index == v[j].index)
        {
            ans+=u[i].value*v[j].value;
            i++;
            j++;
        }
        else if(u[i].index < v[j].index) i++;
        else j++;
    }
    printf("%lld\n",ans);
    return 0;
}

#include<stdio.h>
struct m
{
    int a,b;
}u[500000],v[500000];
int main()
{
    int n,a,b,i,j,k=0;
    long long int x=0;
    scanf("%d %d %d",&n,&a,&b);
    for(i=0;i<a;i++)
        scanf("%d %d",&u[i].a,&u[i].b);
    for(i=0;i<b;i++)
        scanf("%d %d",&v[i].a,&v[i].b);
    for(i=0;i<a;i++)
        for(j=k;j<b;j++)
        {
            if(u[i].a==v[j].a)
            {
                x+=u[i].b*v[j].b;
                k=j+1;
                break;
            }
            if(u[i].a<v[j].a)
            {
                k=j;
                break;
            }
        }
    printf("%lld",x);
    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632