1 条题解
-
0
思路与算法
仅统计比首个成绩高的人数作为零基排名,除以行数确定列,按列奇偶翻转行号。
正确性说明
成绩互不相同,较高人数恰是零基排名。每列容纳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