[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. jQuery的validation插件(验证表单插件)

    更完整的参考:http://www.runoob.com/jquery/jquery-plugin-validate.html 验证隐藏字段的使用(验证通过后ajax提交表单):http://www. ...

  2. struts入门

    1.概念

  3. Ubuntu之镜像iso安装系统

    ubuntu的安装 官网下载iso文件,网址:http://releases.ubuntu.com/16.04.4/, 选择:ubuntu-16.04.4-server-amd64.iso: 下载完毕 ...

  4. [Leetcode] Combination Sum 系列

    Combination Sum 系列题解 题目来源:https://leetcode.com/problems/combination-sum/description/ Description Giv ...

  5. rabbitmq集群搭建方法简介(测试机linux centos)【转】

    本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...

  6. Machine Learning系列--TF-IDF模型的概率解释

    信息检索概述 信息检索是当前应用十分广泛的一种技术,论文检索.搜索引擎都属于信息检索的范畴.通常,人们把信息检索问题抽象为:在文档集合D上,对于由关键词w[1] ... w[k]组成的查询串q,返回一 ...

  7. 如何读懂statspack报告

    前言:这篇文章是我从网上找到的,但可惜不知道是哪位大侠写(译)的,因此这里无法注明了.仔细看了看,这篇文章对初学者应该很有帮助,写的比较详细,通俗易懂,因此整理一下,便于阅读:内容略有调整,不单做调整 ...

  8. 未找到与约束 ContractName Microsoft.VisualStudio.Utilitues.IContentTypeRegistryService......

    1.问题提出 用VS 2013 with Update5 开发项目,点击项目中的文件,发现打不开,抛出如下的错误. 错误提示: 未找到与约束 ContractName Microsoft.Visual ...

  9. 阻止MyEclipse启动项目时自动跳转的debug视图

    启动web项目时,习惯使用debug方式启动,但此时会自动跳转到debug视图,很不习惯. 通过修改首选项配置,可以禁止跳转

  10. Codeforces 813B The Golden Age(数学+枚举)

    题目大意:如果一个数t=x^a+y^b(a,b都是大于等于0的整数)那就是一个unlucky数字.给你x,y,l,r(2 ≤ x, y ≤ 10^18, 1 ≤ l ≤ r ≤ 10^18),求出l到 ...