因为儿子需要,所以又更一篇水题题解.
很容易想到爆搜2^40复杂度直接搜,当然也可以合并分别处理2堆,但是我觉得这题剪枝完全不必要.所以一发爆搜+剪枝就过了.
剪枝就是必须保证前面的搜到的答案必要一致.emm没了

#include <bits/stdc++.h>
using namespace std;
const int N=45;
int a[N];
int cka[N],ckb[N];
int n,flag;

void dfs(int u,int dep1,int dep2)
{
    if(u>n)    return;
    if(flag)   return;
    if(dep1!=1&&dep2!=1)
    {
        if(dep1<=dep2)
        {
            if(cka[dep1-1]!=ckb[dep1-1])    return;
        }
        else
        {
            if(cka[dep2-1]!=ckb[dep2-1])    return;
        }
    }
    if(dep1==n/2)
    {
        int flag1=1;
        for(int i=u,j=dep2;i<=n;i++,j++)
        {
            if(a[i]!=cka[j])    flag1=0;
        }
        if(flag1) flag=1;
        return;
    }
    cka[dep1]=a[u];
    dfs(u+1,dep1+1,dep2);
    ckb[dep2]=a[u];
    dfs(u+1,dep1,dep2+1);
}

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        flag=0;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        dfs(1,0,0);
        if(flag)    puts("Frederica Bernkastel");
        else        puts("Furude Rika");
    }
    return 0;
}