官方题解
2026-02-23 00:30:30
发布于:江苏
16阅读
0回复
0点赞
题目大意
有 个人参加石头剪刀布比赛,一共 轮,每轮结束后重新排名,问最终的排名如何。
解题思路
使用结构体存储每名选手的编号、出拳顺序以及获胜场数,便于后续进行排序。
对每一轮比赛判断每组选手的胜负关系,记录每位选手的胜场数,每轮比赛结束对整体进行排序。
最终输出最终排名即可。
参考代码
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
struct P{
int id;
string s;
int cnt;
}p[N];
bool cmp(P a,P b){
if(a.cnt!=b.cnt) return a.cnt>b.cnt;
return a.id<b.id;
}
int main(){
int n,m;cin>>n>>m;
for(int i=1;i<=2*n;i++){
cin>>p[i].s;
p[i].s=' '+p[i].s;
p[i].id=i;
p[i].cnt=0;
}
for(int j=1;j<=m;j++){
for(int i=1;i<=2*n;i+=2){
if(p[i].s[j]=='G' && p[i+1].s[j]=='C') p[i].cnt++;
else if(p[i].s[j]=='C' && p[i+1].s[j]=='G') p[i+1].cnt++;
else if(p[i].s[j]=='C' && p[i+1].s[j]=='P') p[i].cnt++;
else if(p[i].s[j]=='P' && p[i+1].s[j]=='C') p[i+1].cnt++;
else if(p[i].s[j]=='P' && p[i+1].s[j]=='G') p[i].cnt++;
else if(p[i].s[j]=='G' && p[i+1].s[j]=='P') p[i+1].cnt++;
}
sort(p+1,p+2*n+1,cmp);
}
for(int i=1;i<=2*n;i++){
cout<<p[i].id<<endl;
}
return 0;
}
这里空空如也







有帮助,赞一个