前言
作者是 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; struct stu{int x,id;}a[105]; bool cmp(stu x,stu y){return x.x>y.x;}; void dfs(int x,int y){ 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; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(d[i][j]==x) cout<<j<<' '<<i,exit(0); }
|