测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A17435. 座位(seat)

填空题 困难

题目描述

座位(seat)

题目描述

CSP-J 2025 第二轮正在进行。小 R 所在的考场共有 n * m 名考生,其中所有考生的 CSP-J 2025 第一轮成绩互不相同。所有 n * m 名考生将按照 CSP-J 2025 第一轮的成绩,由高到低蛇形分配座位,排列成 n 行 m 列。具体地,设小 R 所在的考场的所有考生的成绩从高到低分别为 s1​ > s2​ >⋯> sn×m​, 则成绩为 s1 的考生的座位为第 1 列第 1 行,成绩为 s2 的考生的座位为第 1 列第 2 行,……,成绩为 sn 的考生的座位为第 1 列第 n 行,成绩为 sn+1 的考生的座位为第 2 列第 n 行,……,成绩为 s2n 的考生的座位为第 2 列第 1 行,成绩为 s2n+1 的考生的座位为第 3 列第 1 行,以此类推。

例如,若 n=4,m=5,则所有 4*5=20 名考生将按照 CSP-J 2025 第一轮成绩从高到低的顺序,根据下图中的箭头顺序蛇形分配座位。

给定小 R 所在的考场座位的行数 n 与列数 m,以及小 R 所在的考场的所有考生 CSP-J 2025 第一轮的成绩 a1,a2,...,an×m,其中 a1 为小 R CSP-J 2025 第一轮的成绩,你需要帮助小 R 求出,他的座位为第几列第几行。

输入格式

从文件 seat.in 中读入数据。

输入的第一行包含两个正整数 n,m,分别表示小 R 所在的考场座位的行数与列数。

输入的第二行包含 n * m 个正整数 a1,a2,...,an×m,分别表示小 R 所在的考场的所有考生 CSP-J 2025 第一轮的成绩,其中 a1 为小 R CSP-J 2025 第一轮的成绩。

输出格式

输出到文件 seat.out 中。

输出一行两个正整数 c,r,表示小 R 的座位为第 c 列第 r 行。

样例 1 输入

2 2
99 100 97 98

样例 1 输出

1 2

样例 1 解释

按照成绩从高到低的顺序,成绩为 100 的考生的座位为第 1 列第 1 行,成绩为 99 的考生的座位为第 1 列第 2 行,成绩为 98 的考生的座位为第 2 列第 2 行,成绩为 97 的考生的座位为第 2 列第 1 行。小 R 的成绩为 99,因此座位为第 1 列第 2 行。

样例 2 输入

2 2
98 99 100 97

样例 2 输出

2 2

样例 2 解释

按照成绩从高到低的顺序,成绩为 100 的考生的座位为第 1 列第 1 行,成绩为 99 的考生的座位为第 1 列第 2 行,成绩为 98 的考生的座位为第 2 列第 2 行,成绩为 97 的考生的座位为第 2 列第 1 行。小 R 的成绩为 98,因此座位为第 2 列第 2 行。

样例 3 输入

3 3
94 95 96 97 98 99 100 93 92

样例 3 输出

3 1

数据范围

对于所有测试数据,保证:

1≤n≤10,1≤m≤10;
对于所有 1≤i≤n×m,均有 1≤ai​≤100,且 a1​,a2​,…,a n×m​ 互不相同。

特殊性质 A:对于所有 1≤i≤n×m,均有 ai​=i。

特殊性质 B:对于所有 1≤i≤n×m,均有 ai​=n×m−i+1。


参考答案

#include <bits/stdc++.h> using namespace std; int main() { int n, m, a, a1, k = 1; cin >> n >> m >> a1; for (int i = 1; i < n*m; i++) { cin >> a; if (a > a1) k++; } int lie = ceil(1.0 * k / n); int g = k % n; if (g == 0) g = n; //特殊情况 int hang; if (lie % 2 == 0) { //偶数列:从下往上排 hang = n - g + 1; } else { //奇数列:从上往下排 hang = g; } cout << lie << " " << hang; return 0; }
上一题 下一题