有题目可知,最后我们一定会得到 a数组与b 数组相等的情况
const int N=50+5;
int n,m,t;
int i,j,k;
int a[N],b[N],tag[N];
bool flag;
void DFS(int pa,int pb,int cur)
//pa a数组所储存的元素个数,pb b数组的元素个数,cur 原数组
{
if(flag) return ;
if(pa> (n>>1) ) return ;
if(pb> (n>>1) ) return ;
if(cur>n){ flag=1; return ; }
//debug(cur);
if(tag[cur]==a[pb+1]){
b[pb+1]=tag[cur];
DFS(pa,pb+1,cur+1);
}
a[pa+1]=tag[cur];
DFS(pa+1,pb,cur+1);
}
int main()
{
//IOS;
rush(){
cin>>n;
for(i=1;i<=n;i++) cin>>tag[i];
a[1]=tag[1];
flag=0;
DFS(1,0,2);
if(flag) puts("Frederica Bernkastel");
else puts("Furude Rika");
}
PAUSE;
return 0;
}
BFS,从前开始或从后开始搜索,是否满足上述子序列
const int N=300+5;
int n,m,t;
int i,j,k;
int a[N];
int main()
{
IOS;
rush(){
cin>>n;
for(i=0;i<n;i++) cin>>a[i];
queue<int> q,p;
for(i=0;i<n;i++){
if(q.empty()) q.push(a[i]);
else{
if(q.front()==a[i]) q.pop();
else q.push(a[i]);
}
}
for(i=n-1;;i--){
if(p.empty()) p.push(a[i]);
else{
if(p.front()==a[i]) p.pop();
else p.push(a[i]);
}
if(i==0) break;
}
if(q.empty() || p.empty()) puts("Frederica Bernkastel");
else puts("Furude Rika");
}
//PAUSE;
return 0;
}