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

AC代码

#include <cstdio>
#include <cmath>
#include<cctype>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
typedef vector<char> v;
const int maxn = 200 + 5;
char a[maxn];
bool is_same(int st1, int st2, int n) {
	int flag = 1;
	for(int i = st1, j = st2; i < st1+n; ++i, ++j) {
		if(a[i] != a[j]) {
			flag = 0;
			break;
		}
	}
	if(flag) return true;
	return false;
}
int main() {
	int T;
	scanf("%d", &T);
	while(T--) {
		scanf("%s", a);
		int n = 0;
		for(int i = 0; a[i] != '\0'; ++i) {
			if(isalpha(a[i])) {
				a[n++] = a[i];
			}
		}
		int flag = 0;
		//ABABA
		if(n >= 5) for(int i = 2; i <= n/2; ++i) { //枚举AB
			if(i*2 == n || i <= n - 2*i) continue;
			int ok = 1;
			for(int j = i, k = 0; k < i; ++j, ++k) {
				if(a[k] != a[j]) {
					ok = 0;
					break;
				}
			}

			if(ok) {
				for(int j = i*2, k = 0; j < n; ++j, ++k) {
					if(a[j] != a[k]) {
						ok = 0;
						break;
					}
				}
			} 

			if(ok && n-2*i == i - (n-2*i)) {
				ok = !(is_same(0, n-2*i, n-2*i));
			}

			if(ok)  {
				flag = 1;
				break;
			}
		}
		//ABABCAB
		if(!flag && n >= 7) {
			for(int i = 2; i <= n/3; ++i) {
				if(i*3 == n) continue;
				int ok = 1;
				if(!is_same(0, i, i)) ok = 0;
				if(ok) {
					if(!is_same(0, n-i, i)) ok = 0;
				}
				//判断A,B,C是否相等
				int c = n - 3*i;
				if(ok) for(int j = 1; j < i; ++j) { //枚举A的长度
					ok = 0;
					if(j == i-j && is_same(0, j, j)) continue;
					if(c == j && is_same(0, 2*i, j)) continue;
					if(c == i-j && is_same(j, 2*i, c)) continue;
					ok = 1;
					break;
				}
				if(ok) {
					flag = 1;
					break;
				}
			}
		}
		if(flag) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}

如有不当之处欢迎指出!

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. scrapy_items

    为什么要items? 当数据量多的时候,没有统一的数据管理,统一格式化麻烦 items中除了能添加字段,还能做什么? 1. 进行预先处理 2. 对从items出去的数据进行处理 3. 写上sql语句逻 ...

  2. git 安装使用

    系统ubuntu14.04 1.安装:sudo  apt-get install git 2.设置name and Email: git config --global user.name " ...

  3. 如何书写优雅、漂亮的SQL脚本?

    本篇来聊聊如何书写漂亮.整洁.优雅的SQL脚本,下面这些是我个人总结.整理出来的.姑且做个抛砖引玉吧,呵呵,欢迎大家一起来讨论.   我们首先来看看一段创建数据表的脚本(如下所示),你是否觉得有什么不 ...

  4. 【Java SE】如何安装JDK以及配置Java运行环境

    摘要:不管是作为苦逼的Java码农,还是高端大气的Java系统架构师,如果不会安装JDK以及配置Java运行环境,那就巧妇难为无米之炊,不能进行Java后续的代码编写.当然如果你是Myeclipse编 ...

  5. virtualbox创建虚拟机及增加硬盘记录

    创建虚拟机 jken01VBoxManage createvm --name "jken01" --basefolder /data/virtualDir/jken01 --reg ...

  6. iOS-UITableviewcell分割线位置

    这几天又遇到要调节列表分割线位置,就想起很久以前刚做时的做法:把自带的分割线隐藏,然后自己加一条UIView,哈哈,不过这一两年不那么干了,把这个方法贴出来: 在 Tableview 的代理方法中,实 ...

  7. Linux下查看CPU、内存和硬盘信息命令

    一.查看cpu信息 cat /proc/cpuinfo 相同physical id 的记录是属于同一个CPU的,对应于多核的信息. 二.查看内存的信息 cat /proc/meminfo 三.查看硬盘 ...

  8. XML实体解析器的作用

    XML实体解析器的作用 什么是实体解析器 如果一个sax解析器需要实现对外部实体的自定义处理,那么必须实现一个EntityResolver接口并且注册到SAX驱动上. 从这段文字可以看出来,实体解析器 ...

  9. Django搭建博客网站(四)

    Django搭建博客网站(四) 最后一篇主要讲讲在后台文章编辑加入markdown,已经在文章详情页对markdown的解析. Django搭建博客网站(一) Django搭建博客网站(二) Djan ...

  10. qt窗口的切换

    思想:在一个窗口类中声明另一继承与Qdialog的类的变量 还有在另一类中parentwidget()函数获取父类窗口,然后将其隐藏.. 窗口1: mywin1.h #ifndef MYWIN1_H ...