1 条题解
-
0
自动搬运
来自洛谷,原作者为

Yizhixiaoyun
AFOed on 2023/10/21搬运于
2025-08-24 22:27:25,当前版本为作者最后更新于2022-04-17 12:47:20,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目传送门
题目分析
这道题并不难,核心就是一个石头剪刀布的函数。
由于有可能出现平局,所以一个 bool 函数并不能很好地解决问题,再加上我们还可以顺便从函数中计算分数,所以使用 int 函数是更好的选择。
以下为核心代码:
int winlose(char a,char b){ if(a==b) return 1; //平 else if(a=='R'&&b=='S') return 2; else if(a=='P'&&b=='R') return 2; else if(a=='S'&&b=='P') return 2; //赢 return 0; //输 }接着就是模拟。第一个答案直接按照题意来,而第二个答案就是在每局都判断一下出什么得分最高。
贴上代码
#include<bits/stdc++.h> using namespace std; int r,n; int ans1,ans2; char a[52][1002],s[1002]; int tot[3]; char u[3]={'R','S','P'}; int winlose(char a,char b){ if(a==b) return 1; else if(a=='R'&&b=='S') return 2; else if(a=='P'&&b=='R') return 2; else if(a=='S'&&b=='P') return 2; return 0; } int main(){ cin>>r; for(register int i=1;i<=r;++i) cin>>s[i]; cin>>n; for(register int i=1;i<=n;++i){ for(register int j=1;j<=r;++j){ cin>>a[i][j]; } } for(register int i=1;i<=r;++i){ tot[0]=0;tot[1]=0;tot[2]=0; for(register int j=1;j<=n;++j){ for(register int k=0;k<3;++k) tot[k]+=winlose(u[k],a[j][i]); ans1+=winlose(s[i],a[j][i]); } int q=max(tot[0],tot[1]); ans2+=max(q,tot[2]); } cout<<ans1<<endl<<ans2; }
- 1
信息
- ID
- 5809
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者