CSP2015-12-02使用C++,模拟测试只能得60分,整体逻辑感觉没啥问题,求指导指导

我的代码:
#include<bits/stdc++.h>
using namespace std;
int a[31][31];
//定义一个结构体,存放进行判断的行列以及向下和向右相除的个数
struct list_num
{
int row=0, col=0;
int num1=0, num2=0;
};
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
int num = 0;
list_num b[1001];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
b[num].row = i;
b[num].col = j;
//行判断
for (int k = j+1; k < m; k++) {
if (a[i][j] == a[i][k]) {
b[num].num1++;
}
else {
break;
}
}
//列判断
for (int l = i+1; l < n; l++) {
if (a[i][j] == a[l][j]) {
b[num].num2++;
}
else
{
break;
}
}
num++;
}
}
//进行消除处理
for (int n1 = 0; n1 < num; n1++) {
int i = b[n1].row, j = b[n1].col;
//只要相同的数大于3个就会进行消除为0
if (b[n1].num1 >= 2) {
for (int n2=0; n2 <= b[n1].num1; n2++) {
a[i][j+n2] = 0;
}
}
else if (b[n1].num2 >= 2) {
for (int n3 = 0; n3 <= b[n1].num2; n3++) {
a[i+n3][j] = 0;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}