1 条题解

  • 0
    @ 2026-10-26 22:50:06

    思路与算法

    仅统计比首个成绩高的人数作为零基排名,除以行数确定列,按列奇偶翻转行号。

    正确性说明

    成绩互不相同,较高人数恰是零基排名。每列容纳n人,因此商为列、余数为从该列起始端的偏移;偶数零基列向下、奇数零基列向上,得到蛇形座位。

    复杂度

    O(nm)时间、O(1)额外空间,流式输入;无需排序全部成绩。

    易错点

    输出顺序是列再行,不是行再列;第二列第一位应在第n行。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n, m, x;
        cin >> n >> m >> x;
        int rank = 0;
        for (int i = 1; i < n * m; i++) {
            int a;
            cin >> a;
            rank += a > x;
        }
        int c = rank / n, row = rank % n;
        cout << c + 1 << ' ' << (c % 2 ? n - row : row + 1) << "\n";
    }
    
    • 1

    信息

    ID
    1909
    时间
    1000ms
    内存
    512MiB
    难度
    入门
    标签
    递交数
    0
    已通过
    0
    上传者