#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//稀疏矩阵加法,行优先,c=a+b,a和b都是nxm矩阵
int cmp(int a,int b,int c,int d){
if(a>c)return 1;
if(a==c&&b>d) return 1;
return 0;
}
void add(int a[][3],int b[][3],int c[][3]){
int n=a[0][1],m=a[0][2],pc=0,pb=1;
for(int i=1;i<=a[0][0];i++){
while(pb<=b[0][0]&&cmp(a[i][1],a[i][2],b[pb][1],b[pb][2])){
c[++pc][0]=b[pb][0],c[pc][1]=b[pb][1],c[pc][2]=b[pb][2];
pb++;
}
if(pb<=b[0][0]&&a[i][1]==b[pb][1]&&a[i][2]==b[pb][2]){
c[++pc][0]=a[i][0]+b[pb][0];
c[pc][1]=a[i][1],c[pc][2]=a[i][2];
pb++;
}
else {
c[++pc][0]=a[i][0];
c[pc][1]=a[i][1],c[pc][2]=a[i][2];
}
}
while(pb<=b[0][0]){
c[++pc][0]=b[pb][0];
c[pc][1]=b[pb][1],c[pc][2]=b[pb][2];
pb++;
}
c[0][0]=pc;c[0][1]=n;c[0][2]=m;
}
int a[10005][3],b[10005][3],c[10005][3];
int main(){
int n,m;scanf("%d%d",&n,&m);
a[0][0]=n,b[0][0]=m;
a[0][1]=a[0][2]=b[0][1]=b[0][2]=100;
for(int i=1;i<=n;i++){
int sa,sb,sc;scanf("%d%d%d",&sa,&sb,&sc);
a[i][0]=sa,a[i][1]=sb;a[i][2]=sc;
}
for(int i=1;i<=m;i++){
int sa,sb,sc;scanf("%d%d%d",&sa,&sb,&sc);
b[i][0]=sa,b[i][1]=sb;b[i][2]=sc;
}
add(a,b,c);
printf("%d\n",c[0][0]);
for(int i=1;i<=c[0][0];i++){
printf("%d %d %d\n",c[i][0],c[i][1],c[i][2]);
}
return 0;
}
MyDS 稀疏矩阵加法
最新推荐文章于 2020-05-24 21:53:32 发布