列表

详情


NC14132. 贝伦卡斯泰露

描述

贝伦卡斯泰露,某种程度上也可以称为古手梨花,能够创造几率近乎
为0的奇迹,通过无限轮回成功打破了世界线收束理论。
和某民科学者不同,贝伦并不在意世界线收束的那套理论,作为奇迹
之魔女,贝伦的爱好只在于品茶。
作为品茶的消遣,贝伦正在解一道简单的谜题。
给出一个长度为n的数列A𝑖,问是否能将这个数列分解为两个长度
为n/2的子序列,满足
∙ 两个子序列不互相重叠。
∙ 两个子序列中的数要完全一样,{1, 2} = {1, 2},{1, 2} ≠ {2, 1}。

输入描述

第一行,一个正整数T,表示数据组数。
接下来T组数据,每组数据的第一行,一个正整数n,第二行𝑛个正整数A𝑖

输出描述

每组数据输出一行,如果可以完成,输出Frederica Bernkastel,否则输出Furude Rika。

示例1

输入:

3
4
1 1 2 2
6
1 2 3 4 5 6
4
1 2 2 1

输出:

Frederica Bernkastel
Furude Rika
Furude Rika

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 608K, 提交时间: 2020-03-30 20:57:46

#include<iostream>
using namespace std;
int a[41],b[41],c[41],t,n;
bool dfs(int i,int j,int id){
	 if(i>n/2||j>n/2) return 0;
	 if(id>n) return 1;
	 if(a[id]==b[j+1]){
		  c[j+1]=a[id];
		  if(dfs(i,j+1,id+1)) return 1;
	 }
	 b[i+1]=a[id];
	 return dfs(i+1,j,id+1);
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		b[1]=a[1];
		puts(dfs(1,0,2)?"Frederica Bernkastel":"Furude Rika");
	}
	return 0;
} 

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 412K, 提交时间: 2023-07-04 16:12:12

#include<iostream>
using namespace std;
int a[41],b[41],c[41],t,n;
bool dfs(int i,int j,int k){
	 if(i>n/2||j>n/2) return 0;
	 if(k>n) return 1;
	 if(a[k]==b[j+1]){  
		  c[j+1]=a[k];
		  if(dfs(i,j+1,k+1)) return 1; 
	 }
	 b[i+1]=a[k]; 
	 return dfs(i+1,j,k+1);
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		b[1]=a[1];
		puts(dfs(1,0,2)?"Frederica Bernkastel":"Furude Rika");
	}
	return 0;
}

上一题