前言

作者是 xxs,考不了 CSP。

做法

照题意模拟即可。

就是将所有人的成绩和序号放在一个结构体中,再排序。

再求出第 $i$ 行第 $j$ 列是名次为几的人即可。

如下图:

1 8 9 16
2 7 10 15
3 6 11 14
4 5 12 13

用 dfs 跑一遍,再在图中找序号为 $1$ 的名次,输出行和列。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,d[15][15],tot,x;//d 序号矩阵,tot 当前序号,x 编号为 1 的数排好序之后的位置。
struct stu{int x,id;}a[105];
bool cmp(stu x,stu y){return x.x>y.x;};
void dfs(int x,int y){ //dfs 求出序号矩阵。
if(x>n||y>m||x<1||y<1) return;
d[x][y]=++tot;
if(y&1){
if(x<n) dfs(x+1,y);
else dfs(x,y+1);
}else{
if(x>1) dfs(x-1,y);
else dfs(x,y+1);
}
}signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
cin>>a[(i-1)*m+j].x,a[(i-1)*m+j].id=(i-1)*m+j;//输入
sort(a+1,a+n*m+1,cmp),dfs(1,1);
for(int i=1;i<=n*m;i++) if(a[i].id==1) x=i;//找 x
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
if(d[i][j]==x) cout<<j<<' '<<i,exit(0);//输出
}