博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P4656][CEOI2017]Palindromic Partitions
阅读量:6695 次
发布时间:2019-06-25

本文共 1036 字,大约阅读时间需要 3 分钟。

题目大意:一个长度为$n$的字符串,要求把它分成尽可能多的小块,使得这些块构成回文串

题解:贪心,从两边从找尽可能小的块使得左右的块相等,判断相等可以用$hash$

卡点:

 

C++ Code:

#include 
#include
#define maxn 1000010const long long base = 233, mod = 1000000007;int Tim;int n, mid;long long pw[maxn], hsh[maxn];char s[maxn];inline long long ghsh(int l, int r) { return ((hsh[r] - hsh[l - 1] * pw[r - l + 1]) % mod + mod) % mod;}inline bool check(int l, int r, int len) { return ghsh(l, l + len - 1) == ghsh(r, r + len - 1);}int work(int l, int r) { if (l > r) return 0; if (l == r) return 1; int len; for (int i = r; i > mid; i--) { len = r - i + 1; if (check(l, i, len)) return work(l + len, i - 1) + 2; } return 1;}int main() { scanf("%d", &Tim); pw[0] = 1; for (int i = 1; i < maxn; i++) pw[i] = pw[i - 1] * base % mod; while (Tim --> 0) { scanf("%s", s + 1); n = strlen(s + 1); mid = n + 1 >> 1; for (int i = 1; i <= n; i++) hsh[i] = (hsh[i - 1] * base + s[i]) % mod; printf("%d\n", work(1, n)); } return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/9712208.html

你可能感兴趣的文章
Nginx 查看运行状态
查看>>
功能性转场动画效果设计
查看>>
Java基础学习笔记 -- 3(变量、标识符、关键字)
查看>>
Java核心API -- 3(正则表达式)
查看>>
Vue.js学习系列(四十五)-- 自定义指令
查看>>
ExpandableList一种可以伸展收缩的listview
查看>>
linux输入输出重定向
查看>>
RIP的五大防环机制
查看>>
自定义java toString方法
查看>>
RedHat 7 静默安装Oracle 12c
查看>>
谷歌浏览器中安装JsonView扩展程序
查看>>
程序员级别鉴定书(.NET面试问答集锦)
查看>>
vue+seaJS 模仿vue-loader
查看>>
工作积累常用语句
查看>>
2.27
查看>>
spring-boot-starter-logging logback配置之<configuration><logger>标签详解
查看>>
排序:归并排序
查看>>
谷歌、高通、三星宣布支持RISC-V
查看>>
从零开始开发微信小程序(三):微信小程序绑定系统账号并授权登录之微信端...
查看>>
[Mysql]——通过例子理解事务的4种隔离级别
查看>>