[NC13B]贝伦卡斯泰露/[51Nod1400]序列分解

题目大意:

给定\(A_{1\sim n}(n\le40)\),问是否能将\(A\)分解成两个相同的子序列?

思路:

折半搜索。时间复杂度\(\mathcal O(2^{\frac n2})\)。

源代码:

#include<set>
#include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=41;
const int base=57,mod=1e9+7;
typedef long long int64;
int n,a[N],b[N],c[N];
std::set<std::pair<int,int> > set;
void dfs1(const int &dep) {
if(dep==n/2) {
int val=0;
if(b[0]<=c[0]) {
for(register int i=b[0]+1;i<=c[0];i++) {
val=((int64)val*base+c[i])%mod;
}
} else {
for(register int i=c[0]+1;i<=b[0];i++) {
val=((int64)val*base+b[i])%mod;
}
}
set.insert(std::make_pair(b[0]-c[0],val));
return;
}
b[++b[0]]=a[dep+1];
if(b[0]>c[0]||b[b[0]]==c[b[0]]) dfs1(dep+1);
b[0]--;
c[++c[0]]=a[dep+1];
if(c[0]>b[0]||c[c[0]]==b[c[0]]) dfs1(dep+1);
c[0]--;
}
void dfs2(const int &dep) {
if(dep==n/2+1) {
int val=0;
if(b[0]<=c[0]) {
for(register int i=c[0];i!=b[0];i--) {
val=((int64)val*base+c[i])%mod;
}
} else {
for(register int i=b[0];i!=c[0];i--) {
val=((int64)val*base+b[i])%mod;
}
}
if(set.count(std::make_pair(c[0]-b[0],val))) throw 0;
return;
}
b[++b[0]]=a[dep-1];
if(b[0]>c[0]||b[b[0]]==c[b[0]]) dfs2(dep-1);
b[0]--;
c[++c[0]]=a[dep-1];
if(c[0]>b[0]||c[c[0]]==b[c[0]]) dfs2(dep-1);
c[0]--;
}
int main() {
for(register int T=getint();T;T--) {
n=getint();
for(register int i=1;i<=n;i++) a[i]=getint();
set.clear();
b[0]=c[0]=0;
dfs1(0);
try {
dfs2(n+1);
} catch(...) {
puts("Frederica Bernkastel");
continue;
}
puts("Furude Rika");
}
return 0;
}

[NC13B]贝伦卡斯泰露/[51Nod1400]序列分解的更多相关文章

  1. 牛客练习赛3 B - 贝伦卡斯泰露

    链接:https://www.nowcoder.net/acm/contest/13/B来源:牛客网 题目描述 贝伦卡斯泰露,某种程度上也可以称为古手梨花,能够创造几率近乎 为0的奇迹,通过无限轮回成 ...

  2. 牛客练习赛3 贝伦卡斯泰露——队列&&爆搜

    题目 链接 题意:给出一个长度为 $n$ 的数列 $A_i$,问是否能将这个数列分解为两个长度为n/2的子序列,满足: 两个子序列不互相重叠(是值不能有共同元素,但位置可以交错). 两个子序列中的数要 ...

  3. 墨西哥萨卡特卡斯将举行GNOME GUADEC 2020 峰会

    导读 GNOME基金会今天宣布了下两届GUADEC(GNOME用户和开发人员欧洲会议)活动的主办城市,这也将是GNOME桌面环境下一版本的代号. 随着GNOME 3.34 “Thessalonik”的 ...

  4. 51NOD 1400 序列分解

    传送门:1400 序列分解序列分解 基准时间限制:1s  空间限制:131072 KBKB131072 KB 1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题1 秒 空间限制:13 ...

  5. 1400 序列分解(dfs)

    1400 序列分解 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n的整数序列.小 ...

  6. 51nod 算法马拉松3 A:序列分解

    序列分解 System Message (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n ...

  7. "巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场

    Combine String #include<cstdio> #include<cstring> #include<iostream> #include<a ...

  8. hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5705 题意:给你一个时间和一个角度,问你下一个时针和分针形成给出的角度是什么时候 题解:我们可以将这个 ...

  9. hdu_5707_Combine String("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5707 题意:给你三个字符串 a,b,c,问你 c能否拆成a,b,a,b串的每一个字符在c中不能变 题解 ...

随机推荐

  1. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

  2. 省市区ajax联动

    function setCity1(){ var areaId1 = $('#areaId1').val(); var cityId1 = $('#cityId1'); var cityOpt = $ ...

  3. 【UOJ#38】【清华集训2014】奇数国

    考虑欧拉函数的性质,60很小,压位存下线段树每个节点出现质数. #include<bits/stdc++.h> ; ; typedef long long ll; using namesp ...

  4. 用sar进行CPU利用率的分析

    07:40:17 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle07:40:19 PM       a ...

  5. 关于angular导入第三方库的问题

    angular-cli使用webpack来将模块打包,在这里配置的scripts和styles会被打包成script.bundle.js和styles.bundle.js文件加载到前台页面. 这样就可 ...

  6. 防范SQL注入

    使用占位符的方式写查询语句hibernate

  7. Educational Codeforces Round 25 D - Suitable Replacement(贪心)

    题目大意:给你字符串s,和t,字符串s中的'?'可以用字符串t中的字符代替,要求使得最后得到的字符串s(可以将s中的字符位置两两交换,任意位置任意次数)中含有的子串t最多. 解题思路: 因为知道s中的 ...

  8. 转载:C++ typename的起源与用法

    转载:http://feihu.me/blog/2014/the-origin-and-usage-of-typename/#typename 侯捷在Effective C++的中文版译序中提到: C ...

  9. office 文档转pdf

    本地先安装 金山wps,并确保可用 工程目录 1.使用前,先执行install.bat 安装jacob 到maven本地仓库 2.复制 jacob-1.18-M2-x64.dlljacob-1.18- ...

  10. docker部署Asp.net core应用

    1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...