贝伦卡斯泰露(DFS || BFS)

    技术2026-04-07  11

     

    有题目可知,最后我们一定会得到 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; }

     

    Processed: 0.009, SQL: 9