题意:给出一篇文章,求略去其中的空格等各种字符(剩余大小写字母后)文中的最长回文子串,输出长度并打印原文中对应的字符串

核心:枚举回文串

枚举回文串的中点下标是一个比较好的方法,如果反复枚举回文起始点复杂度太大

枚举中点分为两种情况(长度为奇数和偶数),分别处理即可

本题目输入的方式略麻烦

/*
ID: lsswxr1
PROG: calfflac
LANG: C++
*/
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;///宏定义
const int  INF = 1000000000;
const int MAXN = 20015;
const int maxn = MAXN;
///全局变量 和 函数#define USACO
#ifdef USACO
#define cin fin
#define cout fout
#endif
//
char src[maxn], txt[maxn];
int reflect[maxn];
int cntTxt, cntSrc;
int ans1, ans2, anslen;
inline bool ok(char s1, char s2)
{int a1 = s1 - 'a';int a2 = s1 - 'A';int b1 = s2 - 'a';int b2 = s2 - 'A';if (a1 == b1 || a1 == b2 || a2 == b1 || a2 == b2)return true;return false;
}
int main()
{
#ifdef USACO    ofstream fout ("calfflac.out");ifstream fin ("calfflac.in");
#endif    ///变量定义string src_;cntSrc = 0;cntTxt = 0;while (getline(cin, src_)){int len = src_.length();for (int i = 0; i < len; i++){src[cntSrc] = src_[i];if ((src[cntSrc] >= 'a' && src[cntSrc] <= 'z') || (src[cntSrc] >= 'A' && src[cntSrc] <= 'Z') ){txt[cntTxt] = src[cntSrc];reflect[cntTxt] = cntSrc;cntTxt++;}cntSrc++;}src[cntSrc++] = '\n';}src[cntSrc] = '\0';bool flag;anslen = 1;for (int midpos = 0; midpos < cntTxt; midpos++){int maxlen = 0;//奇数int ll = midpos - 1;int rr = midpos + 1;maxlen = 1;while (ll >= 0 && rr < cntTxt){if (ok(txt[ll], txt[rr])){maxlen += 2;ll--;rr++;}elsebreak;}if (maxlen > anslen){anslen = maxlen;ans1 = reflect[ll + 1];ans2 = reflect[rr - 1];}//偶数ll = midpos - 1;rr = midpos;maxlen = 0;while (ll >= 0 && rr < cntTxt){if (ok(txt[ll], txt[rr])){maxlen += 2;ll--;rr++;}elsebreak;}if (maxlen > anslen){anslen = maxlen;ans1 = reflect[ll + 1];ans2 = reflect[rr - 1];}}cout << anslen << endl;for (int i = ans1; i <= ans2; i++){cout << src[i];}cout << endl;///结束return 0;
}

转载于:https://www.cnblogs.com/rayforsure/p/3445890.html

USACO SEC.1.3 No.3 Calf Flac相关推荐

  1. USACO Training Section 1.3 Calf Flac 解题报告AC代码

    解题报告: 主要方法是生长法,考虑每一位的左右各有多长的回文串,输出最长的那个,比较好想--不过要注意区分字串的奇偶. 其他实现细节看代码里的注释吧-- AC代码: /* ID: yuanmz91 P ...

  2. usaco Calf Flac(O(n)时间求回文串长度)

    好高兴,为数不多的我没看题解的题·,我用的是O(n)时间求回文串长度的算法算法在我上一篇博客. 然后就是注意细节了. /* ID:jinbo wu TASK: calfflac LANG:C++ */ ...

  3. [USACO 1.3.3]Calf Flac

    o(︶︿︶)o 烦躁,看了半天没看懂这个O(n)的回文串算法是什么东西,直接套上模板就交了.然后AC了 题目: Description 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘), ...

  4. USACO SEC.1.2 No.4 Palindromic Squares

    题意:输入一个进制b([2,20]),确定从[1,300]中哪些数的平方在该进制下是回文数 解法:核心部分是将十进制数转换为任意进制数,除x取余,逆序排列 /* ID: lsswxr1 PROG: p ...

  5. USACO SEC.1.3 No.1 Mixing Milk

    题意:需要收购总数为N的牛奶,现在有M个牛奶供应商(总量足够),给出总数和单价,求最小的花销. 核心:基本的贪心解法,按单价排序逐个选取. 目的在于熟悉基本的贪心法的基本方法和思路 /* ID: ls ...

  6. hdu与poj题目分类

    POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...

  7. 杭电oj题目题型分类(转)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  8. HDOJ题目分类大全

    版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...

  9. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

最新文章

  1. 转帖:硬盘生产全过程(图)
  2. oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战
  3. 验证码识别笔记(二)
  4. 2016科学数据大会临时通知
  5. 用usecase获取需求的方法是否有缺陷,还有什么地方需要改进
  6. Centos7修改网卡名称
  7. matlab离散信号幅频相频特性,信号幅频相频特性画法(频率响应法).pdf
  8. creo数控编程怎么样_CREO数控编程NC图文教程 -
  9. 关于DES加密内部收费版
  10. 史上最最详细的win10虚拟机安装教程,手把手从头到尾
  11. 微博html5版开视频怎么退出,微博怎么取消视频号?微博视频号怎么关闭
  12. seqCNA笔记-处理来自肿瘤样本的高通量测序拷贝数数据
  13. [笔记]NFC笔记——WUP_REQ 和 WUP_RES 消息结构
  14. 瀚高数据库故障诊断指导方案
  15. 端点检测(VAD)技术
  16. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】
  17. HttpStatus状态详解
  18. 漂亮大气的html导航页面,非常大气漂亮的CSS导航栏
  19. MediaPlayer无法成功切换歌曲:setDataSource(FileDescriptor fd)的问题
  20. 快速提高网站流量的外部链接发布与推广技巧

热门文章

  1. 1.3 机器学习基础
  2. oracle 连接数_Oracle多租户数据库资源管理,就这么简单
  3. uint32是什么数据类型_C++编程基础: 4. 数据类型
  4. MyBatis学习总结(26)——Mybatis源码中使用了哪些设计模式?
  5. Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
  6. Nginx学习总结(5)——Nginx基本配置备忘
  7. java frame的使用方法_java内部窗体internalFrame的使用方法
  8. java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏
  9. linux如何制作服务,linux把jar做成服务
  10. 「小程序JAVA实战」小程序 loading 提示框与页面跳转(37)