P14358 [CSP-J 2025] 座位 / seat(民间数据)
_GIGjqw12_ · · 题解
题目理解:
有一个
-
蛇形排列规律 假设座位用
(r, c) 表示(行,列),但题目输出是(c, r) (列,行)。
编号方式(按成绩排名k=1 到n×m ):
如果列号c 是奇数:
该列的行号r 从1 到n (从上到下)。
如果列号c 是偶数:
该列的行号r 从n 到1 (从下到上)。
排名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; }