[NC13B]贝伦卡斯泰露/[51Nod1400]序列分解
[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]序列分解的更多相关文章
- 牛客练习赛3 B - 贝伦卡斯泰露
链接:https://www.nowcoder.net/acm/contest/13/B来源:牛客网 题目描述 贝伦卡斯泰露,某种程度上也可以称为古手梨花,能够创造几率近乎 为0的奇迹,通过无限轮回成 ...
- 牛客练习赛3 贝伦卡斯泰露——队列&&爆搜
题目 链接 题意:给出一个长度为 $n$ 的数列 $A_i$,问是否能将这个数列分解为两个长度为n/2的子序列,满足: 两个子序列不互相重叠(是值不能有共同元素,但位置可以交错). 两个子序列中的数要 ...
- 墨西哥萨卡特卡斯将举行GNOME GUADEC 2020 峰会
导读 GNOME基金会今天宣布了下两届GUADEC(GNOME用户和开发人员欧洲会议)活动的主办城市,这也将是GNOME桌面环境下一版本的代号. 随着GNOME 3.34 “Thessalonik”的 ...
- 51NOD 1400 序列分解
传送门:1400 序列分解序列分解 基准时间限制:1s 空间限制:131072 KBKB131072 KB 1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题1 秒 空间限制:13 ...
- 1400 序列分解(dfs)
1400 序列分解 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n的整数序列.小 ...
- 51nod 算法马拉松3 A:序列分解
序列分解 System Message (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n ...
- "巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场
Combine String #include<cstdio> #include<cstring> #include<iostream> #include<a ...
- hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5705 题意:给你一个时间和一个角度,问你下一个时针和分针形成给出的角度是什么时候 题解:我们可以将这个 ...
- hdu_5707_Combine String("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5707 题意:给你三个字符串 a,b,c,问你 c能否拆成a,b,a,b串的每一个字符在c中不能变 题解 ...
随机推荐
- IDEA常见错误
1. inspects a maven model for resolution problems 在添加Maven依赖的时候,报了inspects a maven model for resolut ...
- JS设计模式——3.封装与信息隐藏
封装.信息隐藏与接口的关系 信息隐藏是目的,封装是手段. 接口提供了一份记载着可供公共访问的方法的契约.它定义了两个对象间可以具有的关系.只要接口不变,这个关系的双方都是可以替换的. 一个理想的软件系 ...
- qq上传文件进行测试要点分析
功能 QQ 兼容性 1.Win系统/Mac系统 Android/IOS 品牌 传 1.上传方式:直接拖拽,按回车键上传 2.多个文件同时上传给一人/多人(考虑稳定性,是否存在内存泄露) 3.不是好友 ...
- CentOS7防火墙fiewall用法
CentOS7与以前常用的CentOS6还是有一些不同之处的,比如在设置开放端口的时候稍许有些不同,常用的iptables命令已经被 firewalld代替.这几天正好有在CentOS7系统中玩Sea ...
- Vuex-Mutation
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 ...
- Java network programming-guessing game
猜数字游戏 游戏的规则如下: 当客户端第一次连接到服务器端时,服务器端生产一个[0,50]之间的随机数字,然后客户端输入数字来猜该数字,每次客户端输入数字以后,发送给服务器端,服务器端判断该客户端发送 ...
- MySQL三种备份
一)备份分类 1 2 3 4 5 6 7 8 9 10 11 12 冷备:cold backup数据必须下线后备份 温备:warm backup全局施加共享锁,只能读,不能写 热备:hot backu ...
- 苹果容器超出内容overflow滑动卡顿问题
-webkit-overflow-scrolling:touch; 就这么一段代码,加载需要滚动的容器css样式中.因为苹果的硬件加速产生的后果....
- 使用非root用户启动tomcat
以下操作均为以root用户运行1.添加tomcat用户组 /usr/sbin/groupadd tomcat 2.添加tomcat用户,并限制登录 /usr/sbin/useradd -s /bin/ ...
- java基础7 封装
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...