week14 hw 1,2
题意:
每一个大人曾经都是一个小孩,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
3
1 1 1
RPS
3
3 0 0
RPS
Output
YES
PSR
NO
思路:
首先我们需要判断能不能赢过对面老师,我们需要对Q老师和对面出的东西进行判断Q老师a个石头,b个布,c个剪刀能够赢的次数为min(a,对面剪刀数) + min(b,对面石头数) + min(c,对面布数)。若是这个次数都达不到要求,那么输出NO。当能够赢的话,我们需要对每一步进行判断,首先我们需要记录下Q老师和对面剩下的各自的石头剪刀布的数量,若是碰到对面出的那个东西,Q老师还有对应的胜利的,那么就出,然后两个数目减一,若是已经没有了,那么就要输出Q老师还有的并且对胜利没有影响的选择,即Q老师手中超过对面对应被克制选择的选项。
代码:
#include
#include
#include
using namespace std;int tempa , tempb , tempc ;
int n, a, b, c;
int number_r = 0;
int number_s = 0;
int number_p = 0;void print()
{if (tempa > number_s) { //如果石头的数量大于对面老师剪刀的数量cout << "R";tempa--;return;}if (tempb > number_r) { //如果布的数量大于对面老师石头的数量cout << "P";tempb--;return;}if (tempc > number_p){cout << "S";tempc--;return;}
}int main()
{int T;cin >> T;while (T-- != 0){cin >> n >> a >> b >> c;int t = ceil(n / 2.0);string k;cin >> k;number_r = 0;number_s = 0;number_p = 0;for (int i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
