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

题目大意:

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

思路:

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

源代码:

  1. #include<set>
  2. #include<cstdio>
  3. #include<cctype>
  4. inline int getint() {
  5. register char ch;
  6. while(!isdigit(ch=getchar()));
  7. register int x=ch^'0';
  8. while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
  9. return x;
  10. }
  11. const int N=41;
  12. const int base=57,mod=1e9+7;
  13. typedef long long int64;
  14. int n,a[N],b[N],c[N];
  15. std::set<std::pair<int,int> > set;
  16. void dfs1(const int &dep) {
  17. if(dep==n/2) {
  18. int val=0;
  19. if(b[0]<=c[0]) {
  20. for(register int i=b[0]+1;i<=c[0];i++) {
  21. val=((int64)val*base+c[i])%mod;
  22. }
  23. } else {
  24. for(register int i=c[0]+1;i<=b[0];i++) {
  25. val=((int64)val*base+b[i])%mod;
  26. }
  27. }
  28. set.insert(std::make_pair(b[0]-c[0],val));
  29. return;
  30. }
  31. b[++b[0]]=a[dep+1];
  32. if(b[0]>c[0]||b[b[0]]==c[b[0]]) dfs1(dep+1);
  33. b[0]--;
  34. c[++c[0]]=a[dep+1];
  35. if(c[0]>b[0]||c[c[0]]==b[c[0]]) dfs1(dep+1);
  36. c[0]--;
  37. }
  38. void dfs2(const int &dep) {
  39. if(dep==n/2+1) {
  40. int val=0;
  41. if(b[0]<=c[0]) {
  42. for(register int i=c[0];i!=b[0];i--) {
  43. val=((int64)val*base+c[i])%mod;
  44. }
  45. } else {
  46. for(register int i=b[0];i!=c[0];i--) {
  47. val=((int64)val*base+b[i])%mod;
  48. }
  49. }
  50. if(set.count(std::make_pair(c[0]-b[0],val))) throw 0;
  51. return;
  52. }
  53. b[++b[0]]=a[dep-1];
  54. if(b[0]>c[0]||b[b[0]]==c[b[0]]) dfs2(dep-1);
  55. b[0]--;
  56. c[++c[0]]=a[dep-1];
  57. if(c[0]>b[0]||c[c[0]]==b[c[0]]) dfs2(dep-1);
  58. c[0]--;
  59. }
  60. int main() {
  61. for(register int T=getint();T;T--) {
  62. n=getint();
  63. for(register int i=1;i<=n;i++) a[i]=getint();
  64. set.clear();
  65. b[0]=c[0]=0;
  66. dfs1(0);
  67. try {
  68. dfs2(n+1);
  69. } catch(...) {
  70. puts("Frederica Bernkastel");
  71. continue;
  72. }
  73. puts("Furude Rika");
  74. }
  75. return 0;
  76. }

[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. eclipse加速/Nginx配置跨域代理

    下班时间到啦! --下班都是他们的,而我,还是什么都没有. eclipse加速 去掉包含js文件的包的js验证,否则每次启动都需要进行校验(右击项目->properties) Nginx配置跨域 ...

  2. python中赋值、浅拷贝、深拷贝详解(转)

    一.赋值 >>> a = [1, 2, 3]>>> b = a>>> print(id(a), id(b), sep='\n')139701469 ...

  3. linux网络配置完全解析

    概述:熟悉了windows下面的网络配置,对linux下的网络配置缺未必了解透彻.熟练掌握linux下的网络配置原理,能帮助我们更容易掌握网络传输原理:同时具备一些网络连接不通对应问题的排查能力.文本 ...

  4. openjudge-NOI 2.6-2985 数字组合

    题目链接:http://noi.openjudge.cn/ch0206/2985/ 题解: 跟背包问题有点相似,暂且算背包型DP吧,虽然是一道递推题…… fj表示和为j时的结果,得: 即为j减去每一个 ...

  5. js弱数据类型的坑

    1.从表单获取的value是字符串,如果需要为数字相加,则需要转换为number类型 <input type="number" id="val1"> ...

  6. Linux /etc/cron.d作用(转自 定时任务crontab cron.d)

    原文链接:http://huangfuligang.blog.51cto.com/9181639/1608549 一.cron.d增加定时任务 当我们要增加全局性的计划任务时,一种方式是直接修改/et ...

  7. redis aof文件过大问题

    http://www.itnose.net/detail/6682725.html 最近新安装了一台redis,版本为redis-3.2.5 数据盘用的是固态硬盘. 之前用的是普通硬盘,redis日志 ...

  8. python_线程、进程和协程

    线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python #coding=utf-8 __author__ = 'yinjia' i ...

  9. Django admin后台操作

    Django提供自动后台管理应用,简称admin. admin是一个应用,每个Web站点都需要它.admin通过让开发者可以在完成完整的UI之前验证处理数据的代码. 设置admin 打开setting ...

  10. Elasticsearch分片&副本分配

    集群索引中可能由多个分片构成,并且每个分片可以拥有多个副本,将一个单独的索引分为多个分片,可以处理不能在单一服务器上运行的 大型索引. 由于每个分片有多个副本,通过副本分配到多个服务器,可以提高查询的 ...