专栏文章

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

P14358题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minfq04d
此快照首次捕获于
2025/12/02 01:40
3 个月前
此快照最后确认于
2025/12/02 01:40
3 个月前
查看原文
题目理解:
有一个 nnmm 列的考场,所有考生按照第一轮成绩从高到低进行蛇形排列,需要找到他的座位位置。 好的,我们先来理解题意。
  1. 蛇形排列规律 假设座位用(r,c)(r, c)表示(行,列),但题目输出是 (c,r)(c, r)(列,行)。
    编号方式(按成绩排名k=1 k=1n×mn×m):
    如果列号 cc 是奇数:
    该列的行号 rr11n n(从上到下)。
    如果列号 cc 是偶数:
    该列的行号 rrnn11(从下到上)。
    排名kk与座位 (r,c)(r, c) 的关系:
    先确定列:c=(k1)/n+1c = (k - 1) / n + 1(整数除法)。
    再确定行:
    如果 cc 是奇数:r=(k1)r = (k - 1) % n + 1
    如果 cc 是偶数:r=n(k1)r = n - (k - 1) % n4
    代码如下:
CPP
#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;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...