ZOJ - 3818 字符串
思路:对于“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 字符串的更多相关文章
- 题目1006:ZOJ问题(字符串处理)
问题来源 http://ac.jobdu.com/problem.php?pid=1006 问题描述 输入一个只包含'z','o','j'三种字符的字符串,判断是否符合要求. 问题分析 分析AC的三个 ...
- D - D ZOJ - 1151 (字符串操作)
For each list of words, output a line with each word reversed without changing the order of the word ...
- ZOJ 3818 Pretty Poem
暴力模拟 细节处理很重要... #include <iostream> #include <cstring> #include <cstdio> using nam ...
- ZOJ 3818 Pretty Poem 模拟题
这题在比赛的时候WA到写不出来,也有判断ABC子串不一样不过写的很差一直WA 在整理清思路后重写一遍3Y 解题思路如下: 第一种情况:ABABA. 先判断开头的A与结尾的A,得到A的长度, 接着判断A ...
- ZOJ 3603字符串操作
解题思路:找到公共子串然后升序输出 坑的地方就在于输入是存在相同字母的 #include <stdio.h> #include <algorithm> #include < ...
- ZOJ 1115 Digital Roots(简单,字符串与数)
题目 //好一道水水题,可是我居然也错了那么多次,后来百度来发现是因为数据数位可能很长很长,要用字符串数组... //简单 //有坑啊——数据可能很大很大,要用字符串表示! #include<s ...
- zoj 1962 How Many Fibs?(字符串化为数字处理)
事实证明还是,题目拿到手之后,还是还是好好动手划一下比较好,不然直接想打哪!打到哪!很容易乱掉的.将数字倒着弄成字符串比较好处理. #include<stdio.h> #include&l ...
- ZOJ 3490 String Successor 字符串处理
一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...
- ZOJ 3985 - String of CCPC - [字符串处理]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给出一个长度为n的字符串,全部由'C'和'P'组成 ...
随机推荐
- <script>元素在XHTML中的用法
编写XHTML代码的规则要比编写HTML严格得多,例如如下代码: <script type="text/javascript"> function compare(a, ...
- Hi,WeTest限免开放Android Oreo云真机,Android 8.1可开测!
2017年末,谷歌在印度正式发布 Android Oreo 8.1,向实现"为所有人打造由 AI 驱动的全覆盖移动平台"这一愿景迈进.Android 8.1在引入对 Android ...
- Java NIO 之 Selector
Selector是SelectableChannel的多路选择器,配合SelectableChannel实现非阻塞IO. 详见代码 /** * Selector 是 SelectableChannel ...
- 字段的参数 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 在windows环境下更改某软件的窗口位置
#include<stdio.h>#include <stdlib.h>#include <Windows.h>#include <time.h> vo ...
- JMeter基础教程2:正则表达式使用
0. 正则表达式简介 正则表达式,又称规则表达式(Regular Expression,在代码中通常简写为regex.regexp或RE)描述了一种字符串匹配的模式(pattern),可以用来检查一个 ...
- 将Flask应用程序部署在nginx,tornado的简单方法
来自:http://www.xuebuyuan.com/618750.html 在网上搜索了一下部署flask应用的方法,大部分是用wsgi部署在nginx上面,部署了很久,都没有成功,可能是我领悟能 ...
- AC 自动机 模板
简单版 #include <iostream> #include <cstdio> #include <algorithm> #include <cstrin ...
- bzoj 3033: 太鼓达人 [欧拉回路]
3033: 太鼓达人 题意:长m的01环,每个长k的子串都是不同的01串.给出k,求最大的M以及字典序最小的方案. \(M=2^k\) 可以把k-1位01串看成点,k位01串就是边,满足欧拉回路的条件 ...
- bzoj 4822: [Cqoi2017]老C的任务
4822: [Cqoi2017]老C的任务 练手速... #include <iostream> #include <cstdio> #include <cstring& ...