贝伦卡斯泰露

贝伦卡斯泰露

题意:将一个序列分成两个长度为n/2的子序列,规定分的时候不重叠且两个序列的元素相同(按顺序的)比如说1 1 2 2可以分成两个(1,2)和(1,2)这个可以满足条件,但是
1 2 2 1只能勉强分成(1 2)(2,1)不满足条件。
思路:可以考虑队列模拟 ,从前往后,从后往前扫一遍,如果可以和队首元素抵消,就弹出,否则进队。
#include using namespace std; int T,n,a[100005]; int main() { scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1; i<=n; i++)scanf("%d",&a[i]); queueq,p; for(int i=1; i<=n; i++) { if(q.empty())q.push(a[i]); else if(q.front()!=a[i]){ q.push(a[i]); } else q.pop(); } for(int i=n; i>0; i--) { if(p.empty())p.push(a[i]); else if(p.front()!=a[i])p.push(a[i]); else p.pop(); } if(q.empty()||p.empty())puts("Frederica Bernkastel"); else puts("Furude Rika"); } return 0; }

【贝伦卡斯泰露】

    推荐阅读