座位 (CSP-J 2025)

座位 (CSP-J 2025)

第二题依然不难,把数字从大到小排序,然后在n×mn\times m的方格中,将数字按列优先从左上角开始“蛇形”排列,然后找其中一个数字的位置。

下面的是一种办法,因为nnmm都很小(小于10),所以直接排序后循环找到数字位置,然后计算列和行就可以。“蛇形”下的行坐标,可以通过计算奇数和偶数列来分别处理得到。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
int n,m;
int a[105];
 
int main() {
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n*m; i++) {
        scanf("%d", &a[i]);
    }
    int x = a[0];
    sort(a, a + n*m, greater<int>());
    int idx = -1;
    for (int i = 0; i < n*m; i++) {
        if (a[i] == x) {
            idx = i;
            break;
        }
    }
    int col = idx / n;
    int row = idx % n;
    if (col % 2 == 1)
        row = n - row - 1;
    printf("%d %d\n", col+1, row+1);
    return 0;
}