因为儿子需要,所以又更一篇水题题解.
很容易想到爆搜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;
}

京公网安备 11010502036488号