CodeChef ISREC题目提交Wrong Answer 自测全对求问题排查
提交ISREC题目Wrong Answer原因排查
核心错误1:多数分支无输出逻辑(最致命问题)
原代码仅在set s大小为1时才会执行输出,其余场景直接返回,导致两类错误:
- 全0矩阵(所有行无1):
s为空,代码无输出,实际应输出Yes - 含1的行中1的数量不一致:
s存在多个元素,代码无输出,实际应输出No
原代码对应片段:
if(s.size()==1) { // 仅此处有输出逻辑 } // 无else分支,直接返回
核心错误2:未处理全0矩阵的合法场景
ISREC题目中,所有元素为0的矩阵属于合法场景(对应空矩形),但原代码中flag始终为0,s为空,不会进入任何输出分支,直接返回。
核心错误3:未处理含1行数量不一致的非法场景
若不同行的1的总数不同(例如一行有2个连续1,另一行有3个连续1),说明1无法构成对齐的矩形,应输出No,但原代码s大小大于1,无输出逻辑。
修复方案
补全所有分支的输出逻辑,修改solve()函数循环后的代码段:
// 所有行无1的全0场景 if(flag == 0) { cout << "Yes\n"; return; } // 含1行的1数量不一致 if(s.size() != 1) { cout << "No\n"; return; } // 校验所有含1行的起始列是否一致 set<int> start; for(int j=0;j<n;j++) { if(num_consec_ones(row[j],m)) { start.insert(start_index(row[j],m)); } } if(start.size()==1) { cout<<"Yes\n"; } else{ cout<<"No\n"; }
潜在优化点
- 预先存储每行的
num_consec_ones结果,避免同一行被重复调用多次函数,提升效率 - 优化
num_consec_ones的判断逻辑:统计行内「1后接0再出现1」的跳变次数,超过1次则判定为非法行,提升可读性 - 为
start_index函数添加默认返回值(如-1),避免未找到1时的未定义行为
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

