问题 G(1203): 【基础算法】0/1字符串问题
时间限制: 5 Sec 内存限制: 64 MB
提交: 127 解决: 25
[提交][状态][我的提交]
题目描述

输出仅由0和1组成的长度为N的字符串,并且其中不可含有三个连续的相同子串。

例如,110101就不含有三个连续的相同子串。而111010就含有一组长度为1的连续相同子串:111

输入

第1行:字符串长度n(n≤40)
输出

第1行:1个整数,表示满足条件的字符串的个数。
样例输入

(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)

2

样例输出

4

提示

[提交][状态][讨论版]

理解的方向:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int num[100],t,n;
int check(int k)
{
for(int i=1;i<=k/3;i++) //若长度为k,则分成 3份,每份的长度为总长k/3,这就是长度最长的子串。
{
int flag=1;
for(int L=1;L<=i;L++) //搜索增量L为1~i ,例如:check(3),check(4),check(5),分别会检查1,2,3和2 ,3,4和3,4,5 对于6呢,既要检查
//4,5,6,又要检查1 3 5,若135相同还要检查2,4,6,否则中止检查
if(num[k-3*i+L]!=num[k-3*i+L+i]||num[k-3*i+L]!=num[k-3*i+L+i+i]) //这个表达式是本题的难点,同学们记住第一个就行了,后面
//的两个数就好理解了,一个加i,另一个加i*2
{
flag=0; //表明没有三个连续的子串
break; //无需判断内循环后面的情况,例如检查了147不合,无需检查258,跳出内循环,继续外循环
}
if(flag) { return 0;} //有三个连续的子串,就终止,返回0。
}
return 1; //没有三个连续的子串就返回1
}
void dfs(int step)
{
if(step>n)
{
t++;
return ;
}
for(int i=0;i<=1;i++)
{
num[step]=i;
if(check(step)) //检查整个串,若得到到返回值1(即表明在当前长度为step的串中没有三个连续的子串,
//就进入递归下一轮dfs,即:在当前字符串(num数组)再增加一个0/1字符,接着再去检查整个串,如此循环直到长度大于n,则计数
//器加1,如果返回值为0,就扔了刚增加的这个字符,换另一个字符)
dfs(step+1);
}
}
int main()
{
//freopen("d:\\out.txt","w",stdout);
scanf("%d",&n);
num[1]=0;
dfs(2); //用户输入为1和2都是执行dfs(2)
printf("%d\n",t*2);
/*这个t值要乘以2,因为dfs(2)赋值是从2开始,dfs函数并未对num[1]赋值0和1(初始化时为0, 1的情况没有处理),所以答案要*2
或者你把上面的改成以下也可以。
num[1]=0;
dfs(2);
num[1]=1;
dfs(2);
*/
return 0;
}

问题 G(1203): 【基础算法】0/1字符串问题相关推荐

  1. 【译】JS基础算法脚本:字符串重复

    需求 给出字符串和重复次数,返回重复多次的字符串 repeatStringNumTimes("abc", 3) repeatStringNumTimes("abc&quo ...

  2. 【基础算法训练】—— 字符串

    目录 前言 第一题 500. 键盘行

  3. 暑期集训2:ACM基础算法 练习题G:POJ - 1298

    2018学校暑期集训第二天--ACM基础算法 练习题G  --  POJ - 1298 The Hardest Problem Ever Julius Caesar lived in a time o ...

  4. 学习记录1.0(基础算法)

    蒟蒻的总结 主要总结了排序.前缀和(偷懒).差分(偷懒).离散化和区间和并问题. 还没学哈希表.二叉树啥的 ,学了之后会更新的新的做法的! 大部分都来自Acwing啦! 1.快速排序 用指针左右往中间 ...

  5. JavaScript常用基础算法

    为什么80%的码农都做不了架构师?>>>    基础算法 一.排序 冒泡排序 //冒泡排序 function bubbleSort(arr) {for(var i = 1, len ...

  6. AcWing基础算法课Level-2 第五讲 动态规划

    AcWing基础算法课Level-2 第五讲 动态规划 背包问题 AcWing 2. 01背包问题3018人打卡 AcWing 3. 完全背包问题2749人打卡 AcWing 4. 多重背包问题255 ...

  7. AcWing基础算法课Level-2 第三讲 搜索与图论

    AcWing基础算法课Level-2 第三讲 搜索与图论 DFS AcWing 842. 排列数字3379人打卡 AcWing 843. n-皇后问题3071人打卡 BFS AcWing 844. 走 ...

  8. Pascal 基础算法教案

    基础算法教案  目录       第一课 算法简介... 1 第二课 多精度数值处理... 1 第三课 排列与组合... 6 第四课 枚举法... 9 第五课 递归与回溯法... 25 第六课 递推法 ...

  9. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

最新文章

  1. 为不同的屏幕尺寸提供不同的图片(为那些没有必要下载全尺寸大图的设备节省带宽)...
  2. 初步了解并使用正则表达式 (REGular EXPression)
  3. import org.apache.commons.codec.digest.DigestUtils; 未导入
  4. 程序员常用网站收藏[定期更新]——csdn博客
  5. DB2 sql复制error sqlcode2038
  6. 4后期盒子叫什么_考研:什么叫跨考专业?跨考专业的4大原因和存在3个方面的困难...
  7. java View转换类型_java强制类型转换.
  8. Docker的安装与启动教程
  9. 人工智能-baidu-aip语音识别(语音转文字)
  10. HDU 4746 Mophues(莫比乌斯反演)题解
  11. ubuntu14.04 配置C/C++开发IDE
  12. java Thread.yield()用法详解
  13. Android 测试环境噪音分贝
  14. 微信小程序实现微信企业付款到零钱功能的流程
  15. C语言小游戏-寻宝(幸运之星)
  16. 三角形边长求高的c语言函数公式,三角形内三角函数与边长计算公式
  17. android oppo 闪退,为什么oppo手机老是闪退?三个原因分析帮你解决问题
  18. Mac怎么格式化U盘?Mac格式化fat32格式详解
  19. matlab重叠保留法,【matlab实现】重叠相加法与重叠保留法
  20. hibernate 二级缓存 @cache注解

热门文章

  1. 卫星各个波段的说明及用途(C/Ku/Ka/S/L)
  2. Unity接入苹果内购(IAP)
  3. 【包运行】Java 实现图形界面的邮件轰炸机附带视频指导教程
  4. CuteMarkEd 学习日记
  5. 计算机网络实验一:验证性实验
  6. fastdfs添加storage节点
  7. Renix签名字段详解——网络测试仪实操
  8. 504服务器无响应,什么是504网关超时错误(以及如何解决)? | MOS86
  9. php 监听条码枪输入,使用jQuery监听扫码枪输入并禁止手动输入的实现方法
  10. Hive中的left semi join和left anti join