题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328

解题报告:中文题题意就不说了。还好数据不大,只有1000,枚举回文串的中心位置,然后向两边扩展,当扩展到 k 大于要求的K的时候停止扩展,不断更新最长的长度跟开始位置最小。我先做了个预处理,先求出了a(S),然后用一个数组保存了a(S)中的字符在原来的字符串中对应的位置在哪,这样便于字符串比较,而且又可以在O(1)时间得到在原来串中的长度跟开始的位置。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = ;
char tt[maxn],str[maxn];
int loc[maxn],K; char chto(char c)
{
return c >= 'A' && c <= 'Z'? (c+'a'-'A'):c;
}
void StrCmp(char* str,int i,int j,int& left,int& right)
{
int k = ,len = strlen(str);
while(i >= && j < len)
{
if(str[i] != str[j]) k++;
if(k > K)
break;
i--,j++;
}
left = i+;
right = j - ;
}
int kuoleft(int l)
{
l--;
while(l >= && !((tt[l] >= 'A' && tt[l] <= 'Z') || (tt[l] >= 'a' && tt[l] <= 'z')))
l--;
return l+;
}
int kuoright(int r)
{
r++;
int len = strlen(tt);
while(r < len && !((tt[r] >= 'A' && tt[r] <= 'Z') || (tt[r] >= 'a' && tt[r] <= 'z')))
r++;
return r - ;
}
int main()
{
int kase = ;
while(scanf("%d",&K)!=EOF)
{
getchar();
gets(tt);
int f = strlen(tt),len = ;
for(int i = ;i < f;++i)
if((tt[i] >= 'A' && tt[i] <= 'Z') || (tt[i] >= 'a' && tt[i] <= 'z'))
{
str[len] = chto(tt[i]);
loc[len] = i;
len++; //记录这个字符在原来的子串中对应的位置
}
str[len] = NULL;
int s = ,L = ;
for(int l = ;l < len;++l)
{
int left = ,right = ;
StrCmp(str,l-,l+,left,right);
int ll = loc[left],rr = loc[right];
int lt = rr - ll + ;
if(lt > L) L = lt,s = ll;
else if(lt == L && ll < s) s = ll;
if(l < len -)
{
left = right = ;
StrCmp(str,l,l+,left,right);
ll = loc[left],rr = loc[right];
lt = rr - ll + ;
if(lt > L) L = lt,s = ll;
else if(lt == L && ll < s) s = ll;
}
}
printf("Case %d: %d %d\n",kase++,L,s+);
}
return ;
}

CSU 1328 近似回文词(2013湖南省程序设计竞赛A题)的更多相关文章

  1. CSU 1328: 近似回文词

    省赛的A题...现场都没什么人做...其实就一暴力水题......坑死了... 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1 ...

  2. CSU 1328 近似回文词【最长回文字符串(三种方法)】

    输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...

  3. CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337 解题报告:虽然x和y的范围都是10^8,但是如果a 是大于1000的话,那么a^3 ...

  4. csuoj 1328: 近似回文词

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 1 ...

  5. csu-1328 近似回文词 和 最长回文字符串

    原博文地址:http://blog.csdn.net/u012773338/article/details/39857997 最长回文子串 描述:输入一个字符串,求出其中最长的回文子串.子串的含义是: ...

  6. 字符串 - 近似回文词 --- csu 1328

    近似回文词 Problem's Link:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 analyse: 直接暴力枚举每一个终点,然后枚举 ...

  7. CSU 1503 点到圆弧的距离(2014湖南省程序设计竞赛A题)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1503 解题报告:分两种情况就可以了,第一种是那个点跟圆心的连线在那段扇形的圆弧范围内,这 ...

  8. 2012年湖南省程序设计竞赛E题 最短的名字

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1115 解题报告:输入n个字符串,让你求出可以用来区别这些字符串的最少的前缀总共有多少个字 ...

  9. 401 Palindromes(回文词)

      Palindromes  A regular palindrome is a string of numbers or letters that is the same forward as ba ...

随机推荐

  1. 一个叫<NameValuePair>的东西~~~

    public String getInviteRelation(String phone){ String url = PropertiesUtil.getPropertyValue("HH ...

  2. segmentfault.com mongo出识以及对数组的操作

    https://segmentfault.com/a/1190000003951602 首先推荐个工具,no-sql-manager-for-mongodb-professional,虽然收费,但是每 ...

  3. Python中的__init__和__new__介绍

    介绍 首先我们要知道在面向对象编程中,实例化基本遵循创建实例对象.初始化实例对象.最后返回实例对象这么一个过程. Python 中的 __new__ 方法负责创建一个实例对象,__init__ 方法负 ...

  4. excel2013添加坐标轴名称label

    图画好了,x.y轴没有名称,怎么办那 点击左上角有个---添加图标元素----里面有轴标题应该就是

  5. 【原】webpack结合gulp打包

    在我前面的文章中,总结了一下自己学习webpack和gulp的一些东西.然而,在我的实际项目中,单独使用它们两者不能满足项目的需求.我遇到了下面的一些问题. 问题1: 因为我的图片需要放单cdn上面去 ...

  6. linq 之 Distinct的使用

    public class Product { public string Name { get;set;} public int Code { get; set; } } class ProductC ...

  7. tp中附件上传文件,表单提交

    public function tianjia(){ $goods=D('Goods'); if(!empty($_POST)){ if($_FILES['f_goods_image']['error ...

  8. Spring MVC学习笔记——注解式控制器

  9. input disabled 表单禁用

    启用 <input type="> 禁用 <input type=" disabled="">

  10. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...