暂无链接

不回文

【问题描述】

学不会最小回文串划分的豆豆决定弃疗选择挑战非回文划分。

他想知道一个字符串 S 的最少和最多能划分成几个非回文串?

注: 如果一个字符串不是回文串,那么他是非回文串。例如()()是非回文串,而 ())(是回文串。

【输入格式】

第一行一个整数 T,表示测试数据组数。

接下来 T 行,每行一个仅由小写字母构成的字符串 S。

【输出格式】

输出 T 行,每行两个整数分别表示最小和最大划分。如果不存在非合法划分输出“-1 -1” (不含分号)。

【输入样例】

3
aaa
abba
abcb

【输出样例】

-1 -1
2 2
1 2

【数据范围】
      测试点编号                    数据范围                        约定 1                    |S |<=10                无特殊约定 2                                         只有 ab 两种字母 |S |<=1,000 3                                            无特殊约定 4 只有 ab 两种字母 5                  |S |<=30,000 6                                            无特殊约定 7 |S |<=300,000           只有 ab 两种字母 8 9 |S |<=300,000              无特殊约定 10

对于所有数据满足,T=10。

题解

O(n2)O(n2)O(n^2)的dpdp\mathcal{dp}没写,梦想T3T3\mathcal{T}3去了,打完101010走人,结果最暴力的101010分还TT\mathcal{T}了,sh∗tsh∗t\mathcal{sh*t}!

最后的结论太玄学了,能想到算我输,orzorzorz考场切题的RockduRockdu\mathcal{Rockdu},太强了%%%%%%\%\%\%。

首先来看看最小值(貌似最小值是雅礼的签到题,但是我没去啊???sh∗tsh∗t\mathcal{sh*t}!),最小划分只有三种情况:

1.该串本身不回文,那么最小划分就是这个串,答案=1=1=1;

2.该串可以被分成222个不回文的串,此时答案=2" role="presentation" style="position: relative;">=2=2=2;

3.若前面的条件都不满足,则不存在合法划分。

证明???看看题解怎么说:↓↓\downarrow

再说最大值,我们可以先粗略的贪心一波:如果相邻的两个字符不相同,我们就可以把这两个字符单独划分出来(最后一个多余的字符忽略掉),这样我们求出来的答案将会是一个上限,什么时候这个答案是错的呢???,如下:

jajbjcjdjejfjpjojkjjajbjcjdjejfjpjojkj

jajbjcjdjejfjpjojkj

按照贪心的划分,最后会留下一个长度为333的回文串,如下:

ja | jb | jc | jd | je | jf | jp | jo | jkj" role="presentation">ja | jb | jc | jd | je | jf | jp | jo | jkjja | jb | jc | jd | je | jf | jp | jo | jkj

ja\ |\ jb\ |\ jc\ |\ jd\ |\ je\ |\ jf\ |\ jp\ |\ jo\ |\ jkj

所以只能合并一下中间的串:

ja | jb | jc | jdjej | fj | pj | oj | kjja|jb|jc|jdjej|fj|pj|oj|kj

ja\ |\ jb\ |\ jc\ |\ jdjej\ |\ fj\ |\ pj\ |\ oj\ |\ kj

这样我们的最大划分就会−1−1-1。

上面的合并也有一点问题,当串本身不能被划分为两个不回文串的时候,最大划分为11<script type="math/tex" id="MathJax-Element-3801">1</script>,需要特判。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=3e5+5;
int T,len,base=19491001,minn,maxn,flag,cut,i;
char ch[M];
unsigned long long key[M],abc[M],cba[M];
void in(){scanf("%s",ch+1);}
bool bhw(int l,int r){return abc[r]-abc[l-1]*key[r-l+1]!=cba[l]-cba[r+1]*key[r-l+1];}
void ac()
{len=strlen(ch+1),abc[0]=cba[len+1]=maxn=flag=cut=0,minn=-1;for(i=1;i<=len;++i)abc[i]=abc[i-1]*base+ch[i];for(i=len;i>=1;--i)cba[i]=cba[i+1]*base+ch[i];for(i=1;i<len;++i)if(bhw(1,i)&&bhw(i+1,len)){minn=2;cut=1;break;}if(bhw(1,len))minn=1;else if(cut)minn=2;else {puts("-1 -1");return;}for(i=1;i<=len;++i)if(!flag)flag=1;else if(ch[i]!=ch[i-1])flag=0,++maxn;if(len>=3&&len%2){flag=1;for(i=1;i<=len;i+=2)if(ch[i]!=ch[1]){flag=0;break;}for(i=2;i<=len;i+=2)if(ch[i]==ch[1]){flag=0;break;}if(flag)--maxn;}printf("%d %d\n",minn,cut?maxn:1);
}
int main()
{scanf("%d",&T);key[0]=1;for(i=1;i<M;++i)key[i]=key[i-1]*base;while(T--)in(),ac();
}

[2018.07.10 T2]不回文相关推荐

  1. 牛客网 2018校招真题 京东 回文

    Description 牛客网 2018校招真题 回文 Solving Ideas 计算以str[str.length() - 1]为结尾的最大的回文长度,从而判断最少需要追加多少个字母才能使整个串成 ...

  2. 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)

    传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...

  3. 2018.12.24-bzoj-2565-最长双回文串

    题目描述: 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同). 输入长度为n的 ...

  4. 书籍 - 2018.07.10

    90%的程序员,这些基础知识都没学好 基础的东西,就算过了很长时间依然通用,知识如此,书籍亦如此.因此书籍不一定要求新,有些书籍虽然出版很久了,但依旧经典. 学习编程,最主要的还是基础,基础学好了,才 ...

  5. hdu 3613 扩展kmp+回文串

    题目大意: 给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串(从左往右或者从右往左读,都一样),那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如 ...

  6. 【NOIP2016】【Luogu2010】回文日期(枚举,可以计算出部分值)

    problem 指定两个日期(8位数字描述) 问这之间有多少日期表示是回文串(包含这两个日期本身) solution1 枚举所有日期 回文串判断 //O((t-s)*360) #include< ...

  7. HDU 3613 Best Reward 扩展kmp算法(将一个字符串分成两个回文串)

    题目链接:https://vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. Now ...

  8. java判断回文字符串几种简单的实现

    11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进 ...

  9. 回文素数(杭电OJ,不喜欢这个题)

    Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 ...

  10. 用C语言求三位数的回文素数,C语言求回文素数

    问题描述 所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值都相同且n为素数,则称整数为回文素数. 对于偶数位的整数,除了11以外,都不存在回文素数.即所有的4位整数.6位整数. 8位整数-都 ...

最新文章

  1. [LeetCode]题解(python):019-Remove Nth Node From End of List
  2. RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大 | CVPR-2021
  3. ccna第四学期final一二三套题
  4. 「GNN,简直太烂了」,一位Reddit网友的深度分析火了
  5. python用途与前景-python能用来干什么
  6. deepin启动盘制作工具_balenaEtcher for mac(启动盘制作工具) v1.5.70已更新
  7. ArcGIS下的多节点可达性分析
  8. 每日程序C语言17-打印出好看的菱形
  9. linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
  10. (五十五)iOS多线程之GCD
  11. Nature | 我的研究对后人毫无用途:21%的学术论文自发布后从未被引用
  12. 在场景中添加光线——在反光表面添加镜面高光
  13. python编程入门教学视频-Python编程入门电子书及视频教程-非常详细『强烈推荐』...
  14. phpwind测试实战之phpwind安装(三)
  15. 赵小楼《天道》《遥远的救世主》解读(84)救主文化是什么?
  16. 大话微服务:(二)对于业务如何划分微服务,即微服务的颗粒度,又称业务边界
  17. nginx HLS m3u8播放视频跨域问题
  18. Commander(指挥官)介绍
  19. oracle查看表空间的序号,Oracle查询所有序列
  20. 带你走进程序猿的内心世界

热门文章

  1. 网页报错404:The origin server did not find 的原因(持续更新带图并总结了其他博客的内容)
  2. spy 控件没有名字_PyQt5学习笔记(十一)高级容器控件
  3. 单结晶体管的导电特性_【硬见小百科】二极管基础知识分类,应用,特性,原理,参数(二)...
  4. 做添加页面判断用户是否全部填写输入框
  5. #图# #SPFA# ----- codevs1021 玛丽卡
  6. 计算机网络学习笔记——操作
  7. 使用mustache js模板引擎
  8. 再谈javascript图片预加载技术(转)
  9. dojo0.9的第一个实例
  10. 银行家算法及其c++代码实现