算法
(贪心) $O(n)$
题意:机器人会随机选择序列的一个开始的位置,从这个开始的位置依次把序列出完,出完后再从第一位开始出。可以把它理解成一个环,然后是单向的,一共玩n轮,机器人会选择环的任意一个位置,然后去把整个环跑完。而本题要求的是平均胜率最大,所以不难发现这个只跟机器人所有选择里面三种不同操作的计数有关,而与他的出拳顺序无关。
具体做法:找出最多次数的操作,然后输出克制这个操作的操作,每一轮都出这个就行了。
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
string a;
cin >> a;
int r = count(a.begin(), a.end(), 'R');
int p = count(a.begin(), a.end(), 'P');
int s = count(a.begin(), a.end(), 'S');
int mx = max({r, p, s});
char c = 'R';
if (r == mx) c = 'P';
if (p == mx) c = 'S';
if (s == mx) c = 'R';
cout << string(a.size(), c) << '\n';
}
return 0;
}