题目链接:https://www.nowcoder.com/acm/contest/13/B
题解:枚举两个序列的起点,直接爆搜即可。
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<string>
#include<time.h>
#include<math.h>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<functional>
using namespace std;
#define ll long long
#define inf 1000000000
#define mod 1000000007
#define maxn 50
#define lowbit(x) (x&-x)
#define eps 1e-9
int a[maxn],b[maxn],n,c[maxn],flag,used[maxn];
bool dfs(int x,int y,int num)
{
if(num==n/2)
return 1;
used[x]=used[y]=1;
int xx=x+1,yy=y+1;
while(xx<=n && used[xx])
xx++;
while(1)
{
while(yy<=n && (used[yy] || xx==yy || a[xx]!=a[yy]))
yy++;
if(xx<=n && yy<=n)
{
if(dfs(xx,yy,num+1))
return 1;
yy++;
}
else
break;
}
used[x]=used[y]=0;
return 0;
}
int main(void)
{
int T,i;
scanf("%d",&T);
while(T--)
{
flag=0;
memset(used,0,sizeof(used));
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=2;i<=n/2+1;i++)
if(a[1]==a[i] && dfs(1,i,1))
{
flag=1;
break;
}
if(flag)
printf("Frederica Bernkastel\n");
else
printf("Furude Rika\n");
}
return 0;
}