每乙個大人曾經都是乙個小孩,q老師 也一樣。
為了回憶童年,q老師 和 monika 玩起了石頭剪刀布的遊戲,遊戲一共 n 輪。無所不知的 q老師 知道每一輪 monika 的出招,然而作為限制, q老師 在這 n 輪遊戲中必須恰好出 a 次石頭,b 次布和 c 次剪刀。
如果 q老師 贏了 monika n/2(上取整) 次,那麼 q老師就贏得了這場遊戲,否則 q老師 就輸啦!
q老師非常想贏,他想知道能否可以贏得這場遊戲,如果可以的話,q老師希望你能告訴他一種可以贏的出招順序,任意一種都可以。
input
第一行乙個整數 t(1 ≤ t ≤ 100)表示測試資料組數。然後接下來的 t 組資料,每一組都有三個整數:
第一行乙個整數 n(1 ≤ n ≤ 100)
第二行包含三個整數 a, b, c(0 ≤ a, b, c ≤ n)。保證 a+b+c=n
第三行包含乙個長度為 n 的字串 s,字串 s 由且僅由 'r', 'p', 's' 這三個字母組成。第 i 個字母 s[i] 表示 monika 在第 i 輪的出招。字母 'r' 表示石頭,字母 'p' 表示布,字母 's' 表示剪刀
output
對於每組資料:
如果 q老師 不能贏,則在第一行輸出 "no"(不含引號)
否則在第一行輸出 "yes"(不含引號),在第二行輸出 q老師 的出招序列 t。要求 t 的長度為 n 且僅由 'r', 'p', 's' 這三個字母構成。t 中需要正好包含 a 個 'r',b 個 'p' 和 c 個 's'
"yes"/"no"是大小寫不敏感的,但是 'r', 'p', 's' 是大小寫敏感的。
example
input
2
31 1 1
rps3
3 0 0
rps
output
yes
psrno
本題思路較為簡單,分為三部分:q老師贏、平局、monika贏。
用cnt記錄q老師贏的次數,string型別的q記錄q老師出招的順序。
首先第一次遍歷,讓q老師贏得能夠贏得的最大局數,即如果此時贏要出的招式還有富餘,就讓q老師贏。
之後判斷一下,目前贏的次數(cnt)是否達到了規定的數目,如果沒有,那麼直接輸出「no」即可。
如果達到了,那麼繼續第二次遍歷,這次遍歷盡力讓q老師盡可能多的平局,無法平局的時候,出招使得q老師輸掉比賽。
最終遍歷完成,q中儲存的就是答案。
#include
#include
#include
using
namespace std;
int t=
0,n=0;
//資料組數、遊戲次數
int a=
0,b=
0,c=0;
int cnt=0;
//q老師贏的次數
string monika;
string q;
//q老師出招順序
intmain()
else
else
else}}
}int lmt=
ceil
(n*1.0
/2.0);
if(cntelse
else
else
else
else
else}}
}}}}
} cout<<
"yes\n"
; cout<"\n";}
}return0;
}
這道題的演算法也比較簡單,需要注意的是,第一次遍歷的時候,需要把贏的那局對應的q的位置記錄為那局q老師的出招,那其他的位置如何處理?
**中把其他位置都設定為『#』,表示不確定。
這樣在第二次遍歷的時候就不會混淆這個位置有沒有處理過。
也可以在處理之前前線初始化為全#,或者任意不是『r』、『p』、's』的字元。
Week14 A Q老師與石頭剪刀布(必做)
week14 a q老師與石頭剪刀布 必做 每乙個大人曾經都是乙個小孩,q老師 也一樣。為了回憶童年,q老師 和 monika 玩起了石頭剪刀布的遊戲,遊戲一共 n 輪。無所不知的 q老師 知道每一輪 monika 的出招,然而作為限制,q老師 在這 n 輪遊戲中必須恰好出 a 次石頭,b 次布和 ...
剪刀石頭布
開始學習時寫的剪刀石頭布 雖然是用c 寫的 我感覺思想還是面向過程 慚愧慚愧 include include include include includeusing namespace std enum caiquan class inte cet inte cet inte cet system...
石頭剪刀布
題目描述 石頭剪刀布是常見的猜拳遊戲 石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一樣,則不分勝負。在 生活大 第二季第 8 集中出現了一種石頭剪刀布的公升級版遊戲。公升級版遊戲在傳統的石頭剪刀布遊戲的基礎上,增加了兩個新手勢 斯波克 星際迷航 主角之一。蜥蜴人 星際迷航 中的反面角色。這五種手勢...