[2018.07.10 T2]不回文
暂无链接
不回文
【问题描述】
学不会最小回文串划分的豆豆决定弃疗选择挑战非回文划分。
他想知道一个字符串 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
再说最大值,我们可以先粗略的贪心一波:如果相邻的两个字符不相同,我们就可以把这两个字符单独划分出来(最后一个多余的字符忽略掉),这样我们求出来的答案将会是一个上限,什么时候这个答案是错的呢???,如下:
jajbjcjdjejfjpjojkj
按照贪心的划分,最后会留下一个长度为333的回文串,如下:
ja\ |\ jb\ |\ jc\ |\ jd\ |\ je\ |\ jf\ |\ jp\ |\ jo\ |\ jkj
所以只能合并一下中间的串:
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]不回文相关推荐
- 牛客网 2018校招真题 京东 回文
Description 牛客网 2018校招真题 回文 Solving Ideas 计算以str[str.length() - 1]为结尾的最大的回文长度,从而判断最少需要追加多少个字母才能使整个串成 ...
- 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)
传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...
- 2018.12.24-bzoj-2565-最长双回文串
题目描述: 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同). 输入长度为n的 ...
- 书籍 - 2018.07.10
90%的程序员,这些基础知识都没学好 基础的东西,就算过了很长时间依然通用,知识如此,书籍亦如此.因此书籍不一定要求新,有些书籍虽然出版很久了,但依旧经典. 学习编程,最主要的还是基础,基础学好了,才 ...
- hdu 3613 扩展kmp+回文串
题目大意: 给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串(从左往右或者从右往左读,都一样),那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如 ...
- 【NOIP2016】【Luogu2010】回文日期(枚举,可以计算出部分值)
problem 指定两个日期(8位数字描述) 问这之间有多少日期表示是回文串(包含这两个日期本身) solution1 枚举所有日期 回文串判断 //O((t-s)*360) #include< ...
- HDU 3613 Best Reward 扩展kmp算法(将一个字符串分成两个回文串)
题目链接:https://vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. Now ...
- java判断回文字符串几种简单的实现
11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进 ...
- 回文素数(杭电OJ,不喜欢这个题)
Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 ...
- 用C语言求三位数的回文素数,C语言求回文素数
问题描述 所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值都相同且n为素数,则称整数为回文素数. 对于偶数位的整数,除了11以外,都不存在回文素数.即所有的4位整数.6位整数. 8位整数-都 ...
最新文章
- [LeetCode]题解(python):019-Remove Nth Node From End of List
- RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大 | CVPR-2021
- ccna第四学期final一二三套题
- 「GNN,简直太烂了」,一位Reddit网友的深度分析火了
- python用途与前景-python能用来干什么
- deepin启动盘制作工具_balenaEtcher for mac(启动盘制作工具) v1.5.70已更新
- ArcGIS下的多节点可达性分析
- 每日程序C语言17-打印出好看的菱形
- linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
- (五十五)iOS多线程之GCD
- Nature | 我的研究对后人毫无用途:21%的学术论文自发布后从未被引用
- 在场景中添加光线——在反光表面添加镜面高光
- python编程入门教学视频-Python编程入门电子书及视频教程-非常详细『强烈推荐』...
- phpwind测试实战之phpwind安装(三)
- 赵小楼《天道》《遥远的救世主》解读(84)救主文化是什么?
- 大话微服务:(二)对于业务如何划分微服务,即微服务的颗粒度,又称业务边界
- nginx HLS m3u8播放视频跨域问题
- Commander(指挥官)介绍
- oracle查看表空间的序号,Oracle查询所有序列
- 带你走进程序猿的内心世界
热门文章
- 网页报错404:The origin server did not find 的原因(持续更新带图并总结了其他博客的内容)
- spy 控件没有名字_PyQt5学习笔记(十一)高级容器控件
- 单结晶体管的导电特性_【硬见小百科】二极管基础知识分类,应用,特性,原理,参数(二)...
- 做添加页面判断用户是否全部填写输入框
- #图# #SPFA# ----- codevs1021 玛丽卡
- 计算机网络学习笔记——操作
- 使用mustache js模板引擎
- 再谈javascript图片预加载技术(转)
- dojo0.9的第一个实例
- 银行家算法及其c++代码实现