题目链接:点击打开链接
思路:搜索+剪枝
// 贝伦卡斯泰露 运行/限制:3ms/1000ms
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n;
int num[45], s1[45], s2[45];//s1表示序列1,s2为序列2
bool dfs(int cnt1, int cnt2, int dep) {
if (dep > n) return true;//剪枝
if (cnt1 > n / 2 || cnt2 > n / 2) return false;//剪枝
if (num[dep] == s1[cnt2 + 1]) {//可以更新s2
s2[cnt2 + 1] = num[dep];
bool flag = dfs(cnt1, cnt2 + 1, dep + 1);
if (flag) return true;//剪枝
}
//更新s2不满足,继续更新s1
s1[cnt1 + 1] = num[dep];
return dfs(cnt1 + 1, cnt2, dep + 1);
}
int main(){
int t;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &num[i]);
}
s1[1] = num[1];
if (dfs(1, 0, 2)) {
printf("Frederica Bernkastel\n");
}
else {
printf("Furude Rika\n");
}
}
return 0;
}