这是一道深度搜索的题目,具体解析在代码里

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;

int arr[1001], arr_a[1001], arr_b[1001], n;//arr_a,arr_b分别是两个子序列

bool dfs(int i, int j, int k)//i, j, k分别是数组arr, arr_a, arr_b的下标
{
    if(j == k && j == n / 2) return true;
    if(i == n) return false;//两种情况分别是对和错
    if(i == 0)
    {
        arr_a[0] = arr[0];
        i++, j++;
    }
  	//当数组arr_a里面没有数时把第一个数加进去
    if(arr[i] != arr_a[k])//如果arr[i]! = arr_a[k]的话只能把这个数给arr_a
    {
        arr_a[j] = arr[i];
        return dfs(i + 1, j + 1, k);
    }
    else//不然可以给arr_a也可以给arr_b
    {
        arr_a[j] = arr[i];
        if(dfs(i + 1, j + 1, k))
            return true;
        arr_a[j] =  0;//这里需要回溯
        arr_b[k] = arr[i];
        if(dfs(i + 1, j, k + 1))
            return true;
        return false;
    }
}

int main()
{
    int t;
    cin >> t;
    for(int i = 0; i < t; i++)
    {
        memset(arr, 0, sizeof(arr));
        memset(arr_a, 0, sizeof(arr_a));
        memset(arr_b, 0, sizeof(arr_b));
      //每次循环之后重置数组
        cin >> n;
        for(int j = 0; j < n; j++)
            cin >> arr[j];
        if(n % 2 ==0 && dfs(0, 0, 0))
            cout << "Frederica Bernkastel" << endl;
        else
            cout << "Furude Rika" << endl;
    }
    return 0;
}