Problem B: 阅读马拉松

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:21 Solved:20

Description

学校图书馆举办“阅读马拉松”。系统记录了每位同学最近 M 周的每周借阅本数,并设定每周目标 K 本。评选既要看谁达标周数多,也要看谁连续坚持得久,还要看谁中途“掉链子”掉得少。
给定 N 行 M 列的整数矩阵 A,A[i][j] 表示第 i 位同学第 j 周的借阅本数。
若 A[i][j] ≥ K,则称该周为达标周。对每位同学 i,计算:
    1. 达标周数 C_i;
    2. 最长连续达标周数 L_i,若没有任何达标周则 L_i = 0;
    3. 最长连续未达标周数 B_i,若全程达标则 B_i = 0。
排序规则(依次比较):
    1. C_i 大的排在前面;
    2. 若 C_i 相同,则 L_i 大的排在前面;
    3. 若仍相同,则 B_i 小的排在前面;
    4. 若仍相同,则学号小的排在前面。

Input

输入第一行包含三个整数 N M K。接下来 N 行,每行 M 个整数,第 i 行第 j 个整数表示 A[i][j]。

Output

输出按排名顺序输出 N 行,每行四个整数:学号,达标周数最长,连续达标周数最长,连续未达标周数。

Sample Input Copy

3 6 3
3 4 2 5 3 3
0 1 2 0 1 0
3 3 3 3 3 3

Sample Output Copy

3 6 6 0
1 5 3 1
2 0 0 6

样例解释
3 号同学每周都达到 3 本:达标 6 周,最长连续达标 6 周,连续未达标为 0 周。
1 号同学第 3 周只读了 2 本,未达标:达标周数为 5,最长连续达标是第 4~6 周共 3 周,最长连续未达标只有第 3 周共 1 周。两位同学达标周数不同,先按 C 排,3 号在前。
2 号同学 6 周均不足 3 本:达标 0 周,按规则 L = 0,连续未达标 6 周,排在最后。

HINT

1 ≤ N, M ≤ 100,0 ≤ K ≤ 1000,0 ≤ A[i][j] ≤ 1000。


AI 辅助编程建议

你可以把完整题面提供给 AI,并通过多轮交流完成需求确认、程序生成、代码检查和测试修正。建议按照以下过程作答:

① 确认需求。先让 AI 用自己的话复述:达标条件是“每周借阅量 ≥ K”(注意方向是大于等于,不是小于等于);三个统计量分别是什么;并特别确认两条特殊规定——没有达标周时 L = 0、全程达标时 B = 0。如果 AI 把 B 说成“未达标的周数”(丢掉了“最长连续”),或者完全没提这两条特殊规定,要立即纠正后再进入下一步。

② 生成程序。指定编程语言,请 AI 给出完整可运行代码,并说明它用什么方式同时维护两个连续段。核对实现里是否用了两套独立的计数器:一个记录“当前连续达标周数”,一个记录“当前连续未达标周数”,并各自维护对应的历史最大值。

③ 审查逻辑。重点检查四处:两个连续段是否互斥重置——某周达标时必须把未达标计数清零,未达标时必须把达标计数清零,只写一半就会出现“串味”;B 的历史最大值是否在未达标分支里更新;没有达标周时 L 是否为 0(用 max 维护通常自然成立,但要确认不会残留上一次循环的旧值);排序四层方向是否为 C↓ L↓ B↑ 学号↑,特别注意 B 是升序(掉链子越短越靠前),如果 AI 写成降序必须指出。

④ 补充测试。至少覆盖:全部达标(B 应输出 0);全部未达标(C = 0、L = 0、B = M);达标数与最长连续都相同、只有 B 不同的构造用例(验证第三关键字真的生效);四项指标完全相同、只有学号不同(验证第四关键字);M = 1 的退化情形;以及 N = M = 100 的最大规模。

⑤ 迭代修正。把出错的输入、预期输出、实际输出一并提供给 AI,并指明你判断问题出在哪一层(例如“第三层排序方向反了”,或“达标时 B 的计数没有清零”),这样比让它整体重写更快也更可靠。修正后重跑全部用例;如果修改引入了新错误,优先回到上一个可用版本再重新改,避免在坏版本上反复叠加。