P14358 [CSP-J 2025] 座位 / seat(民间数据)

· · 题解

题目理解:

有一个 nm 列的考场,所有考生按照第一轮成绩从高到低进行蛇形排列,需要找到他的座位位置。 好的,我们先来理解题意。

  1. 蛇形排列规律 假设座位用(r, c)表示(行,列),但题目输出是 (c, r)(列,行)。
    编号方式(按成绩排名 k=1n×m):
    如果列号 c 是奇数:
    该列的行号 r1 n(从上到下)。
    如果列号 c 是偶数:
    该列的行号 rn1(从下到上)。
    排名 k 与座位 (r, c) 的关系:
    先确定列:c = (k - 1) / n + 1(整数除法)。
    再确定行:
    如果 c 是奇数:r = (k - 1) % n + 1
    如果 c 是偶数:r = n - (k - 1) % n4
    代码如下:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int main() {
    int n,m;
    cin>>n>>m;
    int x=n*m;
    vector<int>s(x);
    
    for(int i=0;i<x;i++) {
        cin>>s[i];
    }
    
    int q__ = s[0]; 
    vector<int> d_s = s;
    sort(d_s.begin(), d_s.end(), greater<int>());
    int k = 0;
    for (int i=0;i<x;i++) {
        if (d_s[i]==q__) {
            k=i+1;
            break;
        }
    }
    int c=(k-1)/n+1;
    int r;
    if(c%2==1)r=(k-1)%n+1;
    else r=n-(k-1)%n;
    
    cout<<c<<" "<<r<<endl;
    
    return 0;
    }