石头剪刀布
Description
放假期间,小蓝与电脑对垒,玩起了一款经典的游戏: “石头剪刀布” 。游戏规则想必大家已经非常熟悉了:两边一样则为平局,否则石头胜于剪刀;剪刀胜于布;布胜于石头。小蓝与电脑的对垒一共有 n 个回合,平局或败局得分为 0;胜局得分取决于小蓝出手的阵容, 剪刀、石头、布各有不同的分值:
出手“石头” 赢的话得 r 点分值;
出手“剪刀” 赢的话得 s 点分值;
出手“布” 赢的话得 c 点分值;
但是,在第 i 回合中,小蓝不能使用在第( i-k) 个回合中使用的阵容。 (在前 k 个回合中,小蓝可以使用任何阵容。)在游戏开始之前,电脑已经事先安排好了每回合比赛的阵容,而小蓝居然未卜先知了电脑的阵容! 电脑的出手阵容用字符串 t 给出,如果 t 的第 i 个字符( 1≤i≤n)为 r,则代表电脑将在第 i 个回合中出手“石头” 。同样, c 和 s 分别代表“布” 和“剪刀” 。那么请你计算一下,小蓝在游戏中可以获得的最大分值是多少?
Input
n k
r s c
t
其中: n,k,r,s,c 都是整数, t 是字符串。
2≤n≤20
1≤k≤n−1
1≤r,s,c≤1000
字符串 t 的长度是 n。
Output
小蓝在游戏中可以获得的最大分值。
Sample Input
5 2
8 7 6
rsrcr
Sample Output
27
Hint
【样例解释】
机器出手的阵容是:石头、 剪刀、 石头、 布、 石头则小蓝出手:布、 石头、 石头、 剪刀、 布,分值为6+8+0+7+6=27分第3回合里,小蓝不能再出第( 3-2=1)回合里出过的“布”了,所以选择了平局,出手“石头”,得0分。
【评分标准】
30 分 :完成一个题目样例和给出的一个样例;
50 分 :在 30 分的基础上完成给出的另外一个样例;
100 分:在 50 分的基础上完成给出的最后一个样例。
敲重点
这道题吗……实际上还是模拟(蓝桥杯除国赛外不都是模拟(青少组)),but!这道稍微要点思维
上代码!
#include<bits/stdc++.h>usingnamespace std;#define ll long long
map<char,char>mp;
map<char,int>fz;
map<int,char>xl;intmain(){
ll n,k,r,s,c,ans=0;
cin>>n>>k>>r>>s>>c;
mp['r']='c';
mp['s']='r';
mp['c']='s';
fz['r']=r;
fz['s']=s;
fz['c']=c;getchar();
string t;
cin>>t;
ll a= t.size();for(int i=0; i<a; i++){if(i>=k){if(mp[t[i]]==xl[i-k]){if(i+k>=a){
xl[i]=t[i];}else{
xl[i]=' ';}}else{
ans+=fz[mp[t[i]]];
xl[i]=mp[t[i]];}}else{
ans+=fz[mp[t[i]]];
xl[i]=mp[t[i]];}}
cout<<ans<<endl;return0;}
版权归原作者 小周百宝箱~ 所有, 如有侵权,请联系我们删除。