代码:
#include <iostream>
using namespace std;
const int MAXN = 110;
int T, N, M, R, S;
struct card{
int f, p, t;
}A[MAXN], B[MAXN];
inline bool cmp(card a, card b){
if (a.p != b.p) return a.p < b.p;
else return a.f < b.f;
}
inline bool check(int idx){
if (idx == 1){
for (int i = 1; i <= N; ++i) if (!A[i].t) return 0;
return 1;
}
else{
for (int i = 1; i <= N; ++i) if (!B[i].t) return 0;
return 1;
}
}
inline void round(int K ,card last, int stat){
int f = 0;
if (K == 1){
sort(A + 1, A + N + 1, cmp);
for (int i = 1; i <= N; ++i){
if (!A[i].t && ((A[i].f == last.f && A[i].p > last.p) || stat)){
if (stat) last.f = A[i].f;
last.p = A[i].p, A[i].t = 1, f = 1;
break;
}
}
if (f){
if (check(K)){
cout << "FS wins!" << endl;
return;
}
else round(2, last, 1);
}
else round(2, last, 0);
}
else{
sort(B + 1, B + N + 1, cmp);
for (int i = 1; i <= N; ++i){
if (!B[i].t && ((B[i].f == last.f && B[i].p > last.p) || stat)){
if (stat) last.f = B[i].f;
last.p = B[i].p, B[i].t = 1, f = 1;
break;
}
}
if (f){
if (check(K)){
cout << "FR wins!" << endl;
return;
}
else round(1, last, 1);
}
else round(1, last, 0);
}
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> T;
while (T--){
card info;
cin >> N >> M >> R >> S;
for (int i = 1; i <= N; ++i) cin >> A[i].f;
for (int i = 1; i <= N; ++i) cin >> A[i].p;
for (int i = 1; i <= N; ++i) cin >> B[i].f;
for (int i = 1; i <= N; ++i) cin >> B[i].p;
round(S, {0, 0, 0}, 1);
}
return 0;
}