该怎么改#超过时间限制

问题是超过时间限制,该怎么改

#include
#include
#define MAX 100
typedef struct {
    int row,col;
    int e;
}Triple;
typedef struct {
    Triple data[101];
}Mat;
int main(){
    Mat *A=(Mat*)malloc(MAX*sizeof(Mat));
    Mat *B=(Mat*)malloc(MAX*sizeof(Mat));
    Mat *C=(Mat*)malloc(MAX*sizeof(Mat));
    scanf("%d,%d,%d;%d,%d,%d\n",&A->data[1].row,&A->data[1].col,&A->data[1].e,&A->data[2].row,&A->data[2].col,&A->data[2].e);
    scanf("%d,%d,%d;%d,%d,%d\n",&B->data[1].row,&B->data[1].col,&B->data[1].e,&B->data[2].row,&B->data[2].col,&B->data[2].e);
    int i,j;int m,n;
    int cou=0;
    int flag1=0;int flag2=0;
    for(i=1;i<3;i++)
    {
        for(j=1;j<3;j++)
        {
            
            if((A->data[i].row!=B->data[j].row)||(A->data[i].col!=B->data[j].col)) flag1;
            else flag1++;
                
        }
        if(flag1=0){
                cou++;
                C->data[cou].row=A->data[i].row;
                C->data[cou].col=A->data[i].col;
                C->data[cou].e=A->data[i].e;
        }
        else    {
            int q=1;
            while((A->data[i].row!=B->data[q].row)||(A->data[i].col!=B->data[q].col)){
                j++;
            }
                cou++;
                C->data[cou].row=A->data[i].row;
                C->data[cou].col=A->data[i].col;
                C->data[cou].e=A->data[i].e+B->data[q].e;
                }
            }
    for(m=1;m<3;m++){
        for(n=1;n<3;n++){
            if((A->data[n].row!=B->data[m].row)||(A->data[n].col!=B->data[m].col)) flag2;
            else flag2++;
        }
        if(flag2=0){
                cou++;
                C->data[cou].row=B->data[m].row;
                C->data[cou].col=B->data[m].col;
                C->data[cou].e=B->data[m].e;
        }
    }    
    for(int p=1;C->data[p].e!=0&&p<5;p++)
    {
        scanf("%d,%d,%d;",C->data[p].row,C->data[p].col,C->data[p].e);
    }
    printf("\n");
}


#include<stdio.h>
#include<stdlib.h>
#define MAX 100

typedef struct {
    int row, col;
    int e;
} Triple;

typedef struct {
    Triple data[MAX];
    int len;
} Mat;

int main() {
    Mat A = {0}, B = {0}, C = {0}; // 初始化三个矩阵的长度为0
    char line[MAX]; // 定义一个字符数组,用于暂存输入的一行数据
    int i, j, m, n, cou = 0, flag1 = 0, flag2 = 0;

    /* 输入A矩阵 */
    fgets(line, MAX, stdin);
    sscanf(line, "%d,%d,%d;%d,%d,%d", &A.data[1].row, &A.data[1].col, &A.data[1].e,
                                    &A.data[2].row, &A.data[2].col, &A.data[2].e);

    /* 输入B矩阵 */
    fgets(line, MAX, stdin);
    sscanf(line, "%d,%d,%d;%d,%d,%d", &B.data[1].row, &B.data[1].col, &B.data[1].e,
                                    &B.data[2].row, &B.data[2].col, &B.data[2].e);

    for(i = 1; i <= 2; i++) {
        for(j = 1; j <= 2; j++) {
            if(A.data[i].row == B.data[j].row && A.data[i].col == B.data[j].col) {
                /* 如果A和B中都有相同位置的元素,则将它们相加保存在C中 */
                cou++;
                C.data[cou].row = A.data[i].row;
                C.data[cou].col = A.data[i].col;
                C.data[cou].e = A.data[i].e + B.data[j].e;
            }
        }
    }

    /* 将A中不在B中出现的元素保存到C中 */
    for(i = 1; i <= 2; i++) {
        flag1 = 0;
        for(j = 1; j <= 2; j++) {
            if(A.data[i].row == B.data[j].row && A.data[i].col == B.data[j].col) {
                flag1 = 1;
                break;
            }
        }
        if(flag1 == 0) {
            cou++;
            C.data[cou].row = A.data[i].row;
            C.data[cou].col = A.data[i].col;
            C.data[cou].e = A.data[i].e;
        }
    }

    /* 将B中不在A中出现的元素保存到C中 */
    for(i = 1; i <= 2; i++) {
        flag2 = 0;
        for(j = 1; j <= 2; j++) {
            if(B.data[i].row == A.data[j].row && B.data[i].col == A.data[j].col) {
                flag2 = 1;
                break;
            }
        }
        if(flag2 == 0) {
            cou++;
            C.data[cou].row = B.data[i].row;
            C.data[cou].col = B.data[i].col;
            C.data[cou].e = B.data[i].e;
        }
    }

    C.len = cou; // 记录C矩阵的实际长度

    /* 输入C中的元素 */
    for(i = 1; i <= C.len; i++) {
        fgets(line, MAX, stdin);
        sscanf(line, "%d,%d,%d", &C.data[i].row, &C.data[i].col, &C.data[i].e);
    }

    /* 输出C矩阵 */
    for(i = 1; i <= C.len; i++) {
        printf("%d,%d,%d;", C.data[i].row, C.data[i].col, C.data[i].e);
    }
    printf("\n");

    return 0;
}