ZOJ - 3818 字符串

时间:2022-09-18 14:52:49

思路:对于“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问题&lpar;字符串处理&rpar;

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

  2. D - D ZOJ - 1151 &lpar;字符串操作&rpar;

    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 &lt ...

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

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

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

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

  8. ZOJ 3490 String Successor 字符串处理

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

  9. ZOJ 3985 - String of CCPC - &lbrack;字符串处理&rsqb;

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

随机推荐

  1. php安装程序

    php安装程序 制作原理和步骤 检查目录或文件权限 修改或者添加配置文件 检查配置文件的正确性 导入数据库 锁定或删除安装文件 用到函数 iswritable("data/config.ph ...

  2. spark的安装

    官方安装地址:http://spark.apache.org/docs/latest/spark-standalone.html 准备 1.三台机器(m2.m3.m4) 2.m2位master, m3 ...

  3. Linq之select子句

    在Linq中select子句用来指定查询结果的类型和表现形式.Linq查询要么以select子句结尾,要么以group子句结尾. List<UserBaseInfo> users = ne ...

  4. &lbrack;转&rsqb;一些NSArray&comma;NSDictionary&comma;NSSet相关的算法知识

    iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准 ...

  5. java监测方法运行时间&sol;效率方法

    前言: 这周在写一个小项目,虽然小但是是纯调外部接口的,调完了接口还不停的循环接口返回的数据(已转换JSONArray),然后再判断值,再做不同处理,关键是数据量还比较大,这刚做完还没开始上线,测试也 ...

  6. 关于BigDecimal的四舍五入和截断 &lpar;2007-08-10 15&colon;06&colon;26&rpar;

    关于四舍五入:ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->;2ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 ->;1 BigDe ...

  7. 重拾C&plus;&plus; 基础知识总结(二)

    1.标准库string类型: 用户程序要使用string类型对象,必须包含相关头文件 #include <string> 字符串字面值与标准库string类型不是同一种类型,字符串字面值是 ...

  8. OPP面向对象的介绍及使用

    概述 面向过程与面向对象面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现了一个个的类, ...

  9. JS&lowbar;高程5&period;引用类型(3)Array类型-检测数组

    1. instanceof操作符(ECMAScript3) 对于一个网页,或者是一个全局作用域而言,使用instanceof操作符来检测数组就可以得到满意的结果. 语法:if(value instan ...

  10. SQL 问题记录

    今天在处理SQL的时候遇到几个问题: 1.如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中 select distinct id from 收费站 ...