正题

luogu
CF961F


题目大意

给你一个字符串T,对于k=1~n/2,找到最长的串s,满足s是T左右各删除k个字符构成的字串t的前缀后缀(不能是整个字符串)


解题思路

不难发现,k的答案左右各删一个字符必定能得到k+1的答案(不一定是最大),那么k的答案必定小于等于k+1的答案+2

那么可以从中间向两边计算答案,每移一位就+2,然后一直-2,直到找到基数前缀后缀

时间复杂度 O(n)O(n)O(n)


code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define mod 1000000007
#define N 1001000
using namespace std;
int n,now,ans[N];
ll hs[N],pw[N];
char s[N];
ll get(int x,int len)
{int y=x+len-1;return (hs[y]-hs[x-1]*pw[len]%mod+mod)%mod;
}
int main()
{scanf("%d%s",&n,s+1);pw[0]=1;for(int i=1;i<=n;++i)(hs[i]=hs[i-1]*131%mod+s[i])%mod,pw[i]=pw[i-1]*131%mod;if(n&1)ans[(n+1)/2]=-1;now=-1;for(int i=n/2;i>0;--i){int j=n-i+1;now+=2;while(now>-1&&get(i,now)!=get(j-now+1,now))now-=2;ans[i]=now;}for(int i=1;i<=(n+1)/2;++i)printf("%d ",ans[i]);return 0;
}

k-substrings(CF961F)相关推荐

  1. LeetCode刷题记录6——696. Count Binary Substrings(easy)

    LeetCode刷题记录6--696. Count Binary Substrings(easy) 目录 LeetCode刷题记录6--696. Count Binary Substrings(eas ...

  2. 介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势?

    介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势? K近邻(KNN)算法 近邻(Nearest Neighbor)算法既可以用于监督学习(分 ...

  3. K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?

    K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解? K近邻(KNN)是最简单的算法之一,它计算预测样本与训练数据集中每个数据点之间的距离,并找到 ...

  4. Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类

    Kmeans++.Mini-Batch Kmeans.Bisecting Kmeans.K中心点(K-Medoids)算法.K众数聚类.核K均值聚类 目录 Kmeans++.Mini-Batch Km ...

  5. 【算法】一个简单的k均值(k-means)原理

    基本思想 通过迭代寻找k个聚类的一种划分方案,使用这k个聚类的均值来代表相应各类样本时所得到的总体误差最小. 一旦给定了类别数目k,k均值就按照平方误差和最小的原则将所有样本划分到指定数目的类中. k ...

  6. Programming Ability Test学习 3-05. 求链式线性表的倒数第K项(15)

    3-05. 求链式线性表的倒数第K项(15) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 给定一系列正整数,请设计一个尽可能高效的算法, ...

  7. 机器学习算法与Python实践之(二)k近邻(KNN)

      机器学习算法与Python实践之(二)k近邻(KNN) (基于稀疏矩阵的k近邻(KNN)实现) 一.概述 这里我们先来看看当我们的数据是稀疏时,如何用稀疏矩阵的特性为KNN算法加速.KNN算法在之 ...

  8. 基于稀疏矩阵的k近邻(KNN)实现

    基于稀疏矩阵的k近邻(KNN)实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 元旦了!要跨入2015了!呵呵,忙了挺久,没有更新博客了,博客也悄悄地蒙上了 ...

  9. 机器学习算法总结之K近邻(KNN)

    写在前面 K近邻(K-nearest neighbor,k-nn)是一种常用的机器学习监督学习方法,可用于分类和回归问题.其工作机制为:给定测试样本,基于某种距离度量找出训练集中与其最靠近的K个训练样 ...

  10. 对数据集进行k匿名(k-Anonymity)处理(python)——以adult数据集为例

    k匿名(k-Anonymity) k匿名技术参考论文:L.Sweeney. Achieving k-anonymity privacy protection using generalization ...

最新文章

  1. linux内核调优参考
  2. 汇编语言使用C库函数和Linux动态链接
  3. 基于软件开发对嵌入式开发的思考
  4. WPE修改完之后服务器里数据没变,【Wpe技术吧】wpe开启封包ID一直在变化,如何解决...
  5. CSS3实践之路(一):CSS3之我观
  6. js点击图片查看大图,并可以拖动,且滚动滑轮放大缩小
  7. Linux驱动如何在不同版本上快速迭代升级
  8. java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)
  9. Java 获取文件目录最终的修改时间
  10. 【LiteOS】STM32F103-LiteOS移植教程(详细篇)
  11. 搜索算法-广度优先和深度优先搜索
  12. SGU 274 Spam-filter
  13. 《Cocos2D权威指南》——1.6 本章小结
  14. 用了SSD,再用传统机械硬盘电脑,SuperMan(撒泼慢,撒泼男)
  15. GCC Link Time Optimization
  16. Linux上matlab安装过程,Linux matlab 2010a 下载与安装过程
  17. 4.29 笔记+day7作业
  18. markdown生成目录
  19. Linux用户登录和注销
  20. UVM实战 卷I学习笔记2——为验证平台加入各个组件(1)

热门文章

  1. 如何将mysql文件导入MySQL_如何将mysql5的sql文件导入到mysql4?
  2. 在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案
  3. 排列组合思维导图_排列组合——排列数专题
  4. 后端学习 - JVM(上)内存与垃圾回收
  5. leetcode131. 分割回文串
  6. C++ 学习之旅(7)——指针pointer
  7. 组件库实战 | 用vue3+ts实现全局Header和列表数据渲染ColumnList
  8. java数组键_Java基础之数组
  9. [蓝桥杯2016决赛]愤怒小鸟-模拟
  10. numpy.exp()简单理解