这题用的方法有点傻,时间复杂度没算(但肯定挺高的,嘿嘿~),但应付pta上的数据测试肯定是够了,而且好理解,因为查网上的答案都挺长的,所以自己也发一个吧,需要的小伙伴自取就行了~。
大致思路就是先在M中找和N位置相同的点,然后相加(特殊情况为相加后为零),最后再把N中的多余的点加到M中去。
#include<bits/stdc++.h>
using namespace std;
typedef struct poin
{
int i,j;
int elem;
}point;
typedef struct three{
point*data=new point[10000];
int mu,nu,tu;
}sna ;
int main(){
sna M,N;
cin>>M.mu>>M.nu>>M.tu>>N.tu;
N.mu=M.mu;N.nu=M.nu;
for(int i=0;i<M.tu;i++){
cin>>M.data[i].i>>M.data[i].j>>M.data[i].elem;
}
for(int i=0;i<N.tu;i++){
cin>>N.data[i].i>>N.data[i].j>>N.data[i].elem;
}
for(int i=0;i<M.tu;i++){
for(int j=0;j<N.tu;j++){
if(N.data[j].i==M.data[i].i && N.data[j].j==M.data[i].j){
M.data[i].elem+=N.data[j].elem;
N.data[j].elem=0;
if(M.data[i].elem==0){
for(int temp=i;temp<M.tu;temp++){
M.data[i]=M.data[i+1];
}
M.tu--;
}
}
}
}
for(int i=0;i<N.tu;i++){
if(N.data[i].elem!=0){
M.data[M.tu++]=N.data[i];
}
}
cout<<M.mu<<" "<<M.nu<<" "<<M.tu<<'\n';
for(int i=0;i<M.tu;i++){
cout<<M.data[i].i<<" "<<M.data[i].j<<" "<<M.data[i].elem<<'\n';
}
}