思路:对于“ABABA”可以先枚举“AB”,然后检查下一个串是否等于“AB”,剩下的串就是A,最后检查A和B是否相等;对于“ABABCAB”,同样枚举“AB”,然后匹配剩下两个“AB”,剩下的就是C,注意判断A、B、C三者是否相等。写这题一定要细心,容易写错。

AC代码

  1. #include <cstdio>
  2. #include <cmath>
  3. #include<cctype>
  4. #include <algorithm>
  5. #include <cstring>
  6. #include <utility>
  7. #include <string>
  8. #include <iostream>
  9. #include <map>
  10. #include <set>
  11. #include <vector>
  12. #include <queue>
  13. #include <stack>
  14. using namespace std;
  15. #pragma comment(linker, "/STACK:1024000000,1024000000")
  16. #define eps 1e-10
  17. #define inf 0x3f3f3f3f
  18. #define PI pair<int, int>
  19. typedef long long LL;
  20. typedef vector<char> v;
  21. const int maxn = 200 + 5;
  22. char a[maxn];
  23. bool is_same(int st1, int st2, int n) {
  24. int flag = 1;
  25. for(int i = st1, j = st2; i < st1+n; ++i, ++j) {
  26. if(a[i] != a[j]) {
  27. flag = 0;
  28. break;
  29. }
  30. }
  31. if(flag) return true;
  32. return false;
  33. }
  34. int main() {
  35. int T;
  36. scanf("%d", &T);
  37. while(T--) {
  38. scanf("%s", a);
  39. int n = 0;
  40. for(int i = 0; a[i] != '\0'; ++i) {
  41. if(isalpha(a[i])) {
  42. a[n++] = a[i];
  43. }
  44. }
  45. int flag = 0;
  46. //ABABA
  47. if(n >= 5) for(int i = 2; i <= n/2; ++i) { //枚举AB
  48. if(i*2 == n || i <= n - 2*i) continue;
  49. int ok = 1;
  50. for(int j = i, k = 0; k < i; ++j, ++k) {
  51. if(a[k] != a[j]) {
  52. ok = 0;
  53. break;
  54. }
  55. }
  56.  
  57. if(ok) {
  58. for(int j = i*2, k = 0; j < n; ++j, ++k) {
  59. if(a[j] != a[k]) {
  60. ok = 0;
  61. break;
  62. }
  63. }
  64. }
  65.  
  66. if(ok && n-2*i == i - (n-2*i)) {
  67. ok = !(is_same(0, n-2*i, n-2*i));
  68. }
  69.  
  70. if(ok) {
  71. flag = 1;
  72. break;
  73. }
  74. }
  75. //ABABCAB
  76. if(!flag && n >= 7) {
  77. for(int i = 2; i <= n/3; ++i) {
  78. if(i*3 == n) continue;
  79. int ok = 1;
  80. if(!is_same(0, i, i)) ok = 0;
  81. if(ok) {
  82. if(!is_same(0, n-i, i)) ok = 0;
  83. }
  84. //判断A,B,C是否相等
  85. int c = n - 3*i;
  86. if(ok) for(int j = 1; j < i; ++j) { //枚举A的长度
  87. ok = 0;
  88. if(j == i-j && is_same(0, j, j)) continue;
  89. if(c == j && is_same(0, 2*i, j)) continue;
  90. if(c == i-j && is_same(j, 2*i, c)) continue;
  91. ok = 1;
  92. break;
  93. }
  94. if(ok) {
  95. flag = 1;
  96. break;
  97. }
  98. }
  99. }
  100. if(flag) printf("Yes\n");
  101. else printf("No\n");
  102. }
  103. return 0;
  104. }

如有不当之处欢迎指出!

ZOJ - 3818 字符串的更多相关文章

  1. 题目1006:ZOJ问题(字符串处理)

    问题来源 http://ac.jobdu.com/problem.php?pid=1006 问题描述 输入一个只包含'z','o','j'三种字符的字符串,判断是否符合要求. 问题分析 分析AC的三个 ...

  2. D - D ZOJ - 1151 (字符串操作)

    For each list of words, output a line with each word reversed without changing the order of the word ...

  3. ZOJ 3818 Pretty Poem

    暴力模拟 细节处理很重要... #include <iostream> #include <cstring> #include <cstdio> using nam ...

  4. ZOJ 3818 Pretty Poem 模拟题

    这题在比赛的时候WA到写不出来,也有判断ABC子串不一样不过写的很差一直WA 在整理清思路后重写一遍3Y 解题思路如下: 第一种情况:ABABA. 先判断开头的A与结尾的A,得到A的长度, 接着判断A ...

  5. ZOJ 3603字符串操作

    解题思路:找到公共子串然后升序输出 坑的地方就在于输入是存在相同字母的 #include <stdio.h> #include <algorithm> #include < ...

  6. ZOJ 1115 Digital Roots(简单,字符串与数)

    题目 //好一道水水题,可是我居然也错了那么多次,后来百度来发现是因为数据数位可能很长很长,要用字符串数组... //简单 //有坑啊——数据可能很大很大,要用字符串表示! #include<s ...

  7. zoj 1962 How Many Fibs?(字符串化为数字处理)

    事实证明还是,题目拿到手之后,还是还是好好动手划一下比较好,不然直接想打哪!打到哪!很容易乱掉的.将数字倒着弄成字符串比较好处理. #include<stdio.h> #include&l ...

  8. ZOJ 3490 String Successor 字符串处理

    一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...

  9. ZOJ 3985 - String of CCPC - [字符串处理]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给出一个长度为n的字符串,全部由'C'和'P'组成 ...

随机推荐

  1. Windows挂钩注入DLL

    注入DLL实现源码:HINSTANCE g_hInstDll = NULL; HHOOK g_hHook = NULL; DWORD g_dwThreadId = 0; #ifdef _MANAGED ...

  2. centos7安装python3.6

    安装python3.6可能使用的依赖 # yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sql ...

  3. linkin大话面向对象--java关键字

    java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract  default  null  synchronized ...

  4. mysql主从配置主主配置

    一.     概述  MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步.主从模式.互相备份模式的功能.本文档主要阐述了如何在linux系 ...

  5. html的标签

    <a>:anchor 定义锚 <abbr>:abbreviation 定义缩写 <acronym>: 定义只取消首字母的缩写 <address>:定义地 ...

  6. 深入浅出Hadoop之HDFS

    hadoop生态系统一直是大数据灵域的热点,其中包括今天要聊的HDFS,和计划以后想聊的yarn, mapreduce, spark, hive, hbase, 已经聊过的zookeeper,等等. ...

  7. Tensorflow ActiveFunction激活函数解析

    Active Function 激活函数 原创文章,请勿转载哦~!! 觉得有用的话,欢迎一起讨论相互学习~Follow Me Tensorflow提供了多种激活函数,在CNN中,人们主要是用tf.nn ...

  8. 解决苹果电脑(mac)管理员账户变成了普通用户后不能解锁用户与群组的问题

    亲们,我先说说前因,然后再说一下解决方法. 前因 今天不知怎么就想把苹果电脑原来的名字给改一下,于是就做了下面的操作(你们不要这样做) 1.系统偏好设置→用户与组群→当前管理员用户→(右键)高级选项 ...

  9. HTTP协议篇(一):多工、数据流

    管道机制.多工 管道机制(Pipelining) HTTP 1.1 引入了管道机制(Pipelining),即客户端可通过同一个TCP连接同时发送多个请求.如果客户端需要请求两个资源,以前的做法是在同 ...

  10. IO模型浅析

    IO模型 同步.异步.阻塞.非阻塞 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步): ...