CSP2025-T2(座位)
【题目来源】:https://www.luogu.com.cn/problem/P14358?contestId=288427
方法一:模拟,将每个人的分数排序后放入n*m的二维数组中。
1 #include<bits/stdc++.h>
2 using namespace std;
3 int a[110],b[15][15];
4 int main() {
5 int n,m,r,k;
6 cin>>n>>m;
7 for(int i=1; i<=n*m; i++) {
8 cin>>a[i];
9 }
10 r=a[1]; //小R的成绩
11 sort(a+1,a+n*m+1);
12 k=n*m;
13 for(int j=1; j<=m; j++) { //枚举列
14 if(j%2==1) { //奇数列
15 for(int i=1; i<=n; i++) { //正序枚举行
16 b[i][j]=a[k];
17 k--;
18 }
19 } else //偶数列
20 for(int i=n; i>=1; i--) { //倒序枚举行
21 b[i][j]=a[k];
22 k--;
23 }
24 }
25 // 测试代码,输出二维数组中的内容
26 // for(int i=1; i<=n; i++) {
27 // for(int j=1; j<=m; j++) {
28 // cout<<b[i][j]<<" ";
29 // }
30 // cout<<endl;
31 // }
32 //查找小R的位置
33 for(int i=1; i<=n; i++) {
34 for(int j=1; j<=m; j++) {
35 if(b[i][j]==r)
36 cout<<j<<" "<<i; //注意先输出列,再输出行
37 }
38 }
39 return 0;
40 }
方法二:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int a[110];
4 int main() {
5 int n,m,l,c=1;
6 cin>>n>>m;
7 for(int i=1; i<=n*m; i++) {
8 cin>>a[i];
9 if(a[i]>a[1]) c++; //数一下有几个数大于小R的成绩,小R排在第c位
10 }
11 l=c/n; //计算列数
12 if(l%2==1){ //奇数列
13 if(c%n==0) cout<<l<<" "<<n; //余数为0,小R排在该列第n位
14 else cout<<l+1<<" "<<n+1-c%n; //余数不为0,小R排在下一列第n+1-c%n位
15 }
16 else { //偶数列
17 if(c%n==0) cout<<l<<" "<<1; //余数为0,小R排在该列第1位
18 else cout<<l+1<<" "<<c%n; //余数不为0,小R排在下一列第c%n位
19 }
20 return 0;
21 }

浙公网安备 33010602011771号