这题在比赛的时候WA到写不出来,也有判断ABC子串不一样不过写的很差一直WA

在整理清思路后重写一遍3Y

解题思路如下:

第一种情况:ABABA。 先判断开头的A与结尾的A,得到A的长度,

接着判断ABAB 中的AB与AB是否相同(ABAB的长度一定为偶数)

已经知道了A长度,AB的长度 接着判断下A 与B是否相同

第二种情况:ABABCAB-可先讲AB看成整体即DDCD

若存在一个D满足条件 可得到C的长度和位置再判断A-B是否相同A-C是否相同 B-C是否相同(暴力取A的长度咯)

其中在重写的时候WA的一个原因是这样的:

暴力A子串的长度的时候

for(int lena = 1; lena <= len / 3; ++lena){

这么写会导致WA

如果控制到位,这么写:

for(int lena = 1; lena <= (len - 2) / 3; ++lena){

就不会出现错误。

取D子串的时候也是同理。

看了别人写的代码,漫天飞舞的flag_1,flag_2,flag_3

还不如自己写一遍舒服多了

#include <stdio.h>
#include <string.h> int main(){
int n, i, j, k, t, m;
char array[], a[];
int len;
bool flag_a, flag_b;
scanf("%d",&t);
while(t--){
scanf("%s",array);
len = ;
flag_a = flag_b = false;
for(i = ; i < strlen(array); ++i){
if(array[i] >= 'A' && array[i] <= 'Z' || array[i] >= 'a' && array[i] <= 'z'){
a[len++] = array[i];
}
}
a[len] = '\0';
for(int lena = ; lena <= (len - ) / ; ++lena){
bool flag_1 = false;
for(i = ; i < lena; ++i){
if(a[i] != a[len - lena + i])
flag_1 = true;
}
if(flag_1) continue;
int remain_num = len - lena;
if(remain_num % != ) continue;
remain_num /= ;
for(i = ; i < remain_num; ++i){
if(a[i] != a[i + remain_num])
flag_1 = true;
}
if(flag_1) continue;
int lenb = remain_num - lena;
if(lena == lenb){
for(i = ; i < lena; ++i){
if(a[i] != a[i + lena]){
flag_a = true;
break;
}
}
if(flag_a) break;
} else{
flag_a = true;
break;
}
}
for(int lend = ; lend <= (len - ) / ; ++lend){
bool flag_2 = false;
for(i = ; i < lend; ++i){
if(!(a[i] == a[i + lend] && a[i] == a[len - lend + i]))
flag_2 = true;
}
if(flag_2) continue;
int lenc = len - * lend;
bool a_b = false;
for(int lena = ; lena < lend; ++lena){
if(lena == lend - lena){
for(i = ; i < lena; ++i){
if(a[i] != a[lena + i])
a_b = true;
}
if(!a_b) continue;
}
bool a_c = false;
bool b_c = false;
if(lena != lenc) a_c = true;
else{
for(i = ; i < lena; ++i){
if(a[i] != a[ * lend + i]){
a_c = true;
break;
}
}
}
int lenb = lend - lena;
if(lenb != lenc) b_c = true;
else{
for(i = ; i < lenb; ++i){
if(a[lena + i] != a[ * lend + i]){
b_c = true;
break;
}
}
}
if(a_c && b_c){
flag_b = true;
break;
}
}
if(flag_b){
break;
} } if(flag_a || flag_b){
printf("Yes\n");
} else{
printf("No\n");
}
}
return ;
}

ZOJ 3818 Pretty Poem 模拟题的更多相关文章

  1. ZOJ 3818 Pretty Poem

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

  2. ZOJ 3790 Consecutive Blocks 模拟题

    problemCode=3790">Consecutive Blocks 先离散一下,然后模拟,把一种颜色i所在的位置都放入G[i]中.然后枚举一下终点位置,滑动窗体使得起点和终点间花 ...

  3. Capture the Flag ZOJ - 3879(模拟题)

    In computer security, Capture the Flag (CTF) is a computer security competition. CTF contests are us ...

  4. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  5. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  6. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  7. sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)

    The Android University ACM Team Selection Contest Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里 ...

  8. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  9. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

随机推荐

  1. hdu 4638 Group 莫队算法

    题目链接 很裸的莫队, 就不多说了... #include<bits/stdc++.h> using namespace std; #define pb(x) push_back(x) # ...

  2. cocos2dx 随机函数

    cocos2dx 随机数  2.2.3版本 1.初始化时设定随机数种子,只需一次. time_t now = time(NULL); srand((unsigned int)now); 2.需要的时候 ...

  3. 转: object 和embed 标签播放flash

    一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和 EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBE ...

  4. 推荐一些socket工具,TCP、UDP调试、抓包工具 推荐一些socket工具,TCP、UDP调试、抓包工具

    还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...

  5. Windows平台下C++插件系统实现的几个关键技术问题及其解决思路

    根据我的实践,在Windows平台下设计并实现一个C++插件系统,需要解决几个关键技术问题.下面我谈谈需要解决的几个关键技术问题以及我想到的简单的解决思路.由于我主要专注于Windows平台C++程序 ...

  6. 《Java4Android视频教程》学习笔记(一)

    此为个人的学习笔记,所以不具备太强的学习性,若有错误请谅解,如果能指出我的错误,我将万分感谢~ 一:java历史 java诞生 前身:Oak->java 曾经的名字C++(++--) 原意是在C ...

  7. JAVA中SSH面试问题

    1.阐述struts2的执行流程. Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件.核心控制器Filter ...

  8. iostream.h 和stdio.h区别

    stdio.h是C的标准I/O库,是以函数的方式向buffer写入或读取字符.输入输出是这样的printf(...);,scanf(...); iostream是C++的标准I/O库,引入了输入/输出 ...

  9. RADOS工作原理

    转:http://www.csdn.net/article/2014-04-08/2819192-ceph-swift-on-openstack-m/2 Ceph的工作原理及流程 本节将对Ceph的工 ...

  10. SASS安装的那些事

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...