打卡信奥刷题(551)用C++信奥P7184[普及组/提高] [CRCI2008-2009] MAJSTOR

[CRCI2008-2009] MAJSTOR

题目背景

剪刀石头布是一种流行的两人游戏。

题目描述

在游戏中,两人都用自己的手出示三个手势之一:石头,布或剪刀。

如果两个玩家出示相同的手势,则该游戏为平局。否则,剪刀胜布,布胜石头,而石头胜剪刀。

Sven 多年来一直在研究游戏的心理错综复杂性,并已成为游戏的真正大师,他的朋友们在一对一的游戏中没有与他抗衡的机会。

随着世界锦标赛的临近,Sven 正在与 n n n 个朋友同时玩游戏,以练习他的技能。

游戏有 r r r 轮,在每一轮中,Sven 和他的每个朋友出三种手势之一。

计分规则:

  • Sven 获胜,得 2 2 2 分。
  • 平局,得 1 1 1 分。
  • 对手获胜,得 0 0 0 分。

编写一个程序来计算 Sven 的总得分,如果他事先知道他的朋友会出的所有手势,那么他最大得分也是可能的。

输入格式

第一行,一个正整数 r r r,表示比赛轮数。

第二行, r r r 个字符,第 i i i 个字符表示 Sven 在第 i i i 局出的手势,只可能是 S(剪刀),P(布),R(石头)。

第三行,一个正整数 n n n,表示他的朋友数。

接下来 n n n 行,每行都有 r r r 个字符,第 j j j 个字符表示 Sven 的第 i i i 个朋友在第 j j j 局出的手势,只可能是 S(剪刀),P(布),R(石头)。

输出格式

第一行,输出 Sven 的实际分数。

假设他的朋友没有改变他们的手势,则在第二行输出他最大的得分。

样例 #1

样例输入 #1

5
SSPPR
1
SSPPR

样例输出 #1

5
10

样例 #2

样例输入 #2

5
SSPPR
2
PPRRS
RRSSP

样例输出 #2

10
15

样例 #3

样例输入 #3

4
SPRS
4
RPRP
SRRR
SSPR
PSPS

样例输出 #3

12
21

提示

数据规模及约定

对于 100 % 100\% 100% 的数据, 1 ≤ n , r ≤ 50 1 \le n, r \le 50 1n,r50

说明

C++实现

#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(ab) 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;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值