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 }
posted @ 2025-11-05 11:18  TFLSZXL  阅读(23)  评论(0)    收藏  举报