淇淇子的石头剪刀布(简单版C++题解)

在集训的最后一个晚上,淇淇子和水水子都觉得有些无聊,所以他们决定进行n次石头剪刀布。由于水水子是一个预言家,所以水水子已经提前知道了淇淇子在接下来n次对局中的手势。但是,淇淇子是一个巫师,他对水水子发动巫术了,使得水水子在接下来的游戏中只能出a次石头,b次剪刀,c次布(a+b+c=n),但是顺序是不受限制的。
水水子想知道她最多能赢得多少局游戏,聪明的你能帮助她找到答案么?

输入格式:

第一行一个整数t(1<=t<=100)表示测试组数,接下来是t组测试。

每组测试包含三行:

第一行一个正整数n(1<=n<=100)表示对局数

第二行包含三个整数a, b, c(0<=a, b, c<=n),保证a+b+c=n

第三行是长度为n的字符串,只包含'R', 'S', 'P',分别表示石头、剪刀、布,表示淇淇子接下来n局的手势。

输出格式:

输出t行,每组测试一行:

对于每组测试,输出一个整数表示水水子最多能赢得多少局

限制:

空间限制:128MByte
时间限制:1秒

样例:

输入:

2
3
1 1 1
RPS
3
3 0 0
RPS
输出:

3
1

提示:

在第一组测试中,水水子可以出PSR来打败琪琪子3次

在这题的描述之中,我们可以知道,剪刀可以赢布,布可以赢石头,石头可以赢剪刀,这样我们就直接求剪刀与石头的最小值······总之,求出两者之间的最小值就行了,因为谁能赢多少就是谁的步数最少,我们要的是水水子的赢的数量,所以两者剪刀石头布的最小值就行

AC代码:

#include<bits/stdc++.h>
using namespace std;
char RSP[1000];
int R2,S2,P2,cnt;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);//优化输入输出
	int T;
	cin>>T;
	for(int a=1;a<=T;a++){
		int n,R1,S1,P1;
		cin>>n>>R1>>S1>>P1;
		string str;
		cin>>str;
		for(int i=0;i<n;i++){
			RSP[i+1]=str[i];
		}
		for(int i=1;i<=n;i++){
			if(RSP[i]=='R'){
				R2++;
			}else if(RSP[i]=='S'){
				S2++;
			}else if(RSP[i]=='P'){
				P2++;
			}
		}//统计淇淇子的剪刀石头布的数量
		cnt+=min(R1,S2);//求石头与剪刀的最小值
		cnt+=min(S1,P2);//求布与剪刀的最小值
		cnt+=min(P1,R2);//求石头与布的最小值
		cout<<cnt<<"\n";
		cnt=0;//归零!!很重要!!
		R1=0; R2=0;
		S1=0; S2=0;
		P1=0; P2=0;
	}
	return 0;
}

大家一起加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值