当前位置: 首页 > 编程日记 > 正文

Bzoj4566:[HAOI2016]找相同字符

题面

Bzoj

Sol

两个串拼在一起后求出后缀数组
然后显然的\(n^2\)暴力,就是直接枚举求\(LCP\)
又由于扫的时候是对\(height\)\(min\)
那么可以用单调栈维护每一段的贡献相同的

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(4e5 + 5);int n, a[_], is[_], rk[_], sa[_], height[_], tmp[_], t[_];
int S[_], top, s1[_], s2[_];
ll ans, sum[_];
char ss[_];IL int Cmp(RG int i, RG int j, RG int k){return tmp[i] == tmp[j] && tmp[i + k] == tmp[j + k] && i + k <= n && j + k <= n;
}IL void Suffix_Sort(){RG int m = 27;for(RG int i = 1; i <= n; ++i) ++t[rk[i] = a[i]];for(RG int i = 1; i <= m; ++i) t[i] += t[i - 1];for(RG int i = n; i; --i) sa[t[rk[i]]--] = i;for(RG int k = 1; k <= n; k <<= 1){RG int l = 0;for(RG int i = n - k + 1; i <= n; ++i) tmp[++l] = i;for(RG int i = 1; i <= n; ++i) if(sa[i] > k) tmp[++l] = sa[i] - k;for(RG int i = 0; i <= m; ++i) t[i] = 0;for(RG int i = 1; i <= n; ++i) ++t[rk[tmp[i]]];for(RG int i = 1; i <= m; ++i) t[i] += t[i - 1];for(RG int i = n; i; --i) sa[t[rk[tmp[i]]]--] = tmp[i];swap(rk, tmp), rk[sa[1]] = l = 1;for(RG int i = 2; i <= n; ++i) rk[sa[i]] = Cmp(sa[i - 1], sa[i], k) ? l : ++l;if(l >= n) break;m = l;}for(RG int i = 1, h = 0; i <= n; ++i){if(h) --h;while(a[i + h] == a[sa[rk[i] - 1] + h]) ++h;height[rk[i]] = h;}
}int main(RG int argc, RG char* argv[]){scanf(" %s", ss);for(RG int i = 0, len = strlen(ss); i < len; ++i) a[++n] = ss[i] - 'a' + 1, is[n] = 1;scanf(" %s", ss), a[++n] = 27;for(RG int i = 0, len = strlen(ss); i < len; ++i) a[++n] = ss[i] - 'a' + 1, is[n] = 2;Suffix_Sort();for(RG int i = 1; i < n; ++i)s1[i] = s1[i - 1] + (is[sa[i]] == 1), s2[i] = s2[i - 1] + (is[sa[i]] == 2);S[0] = 1;for(RG int i = 1; i < n; ++i){while(top && height[S[top]] > height[i]) --top;S[++top] = i, sum[top] = sum[top - 1] + (s1[i - 1] - s1[S[top - 1] - 1]) * height[i];if(is[sa[i]] == 2) ans += sum[top];}top = 0;for(RG int i = 1; i < n; ++i){while(top && height[S[top]] > height[i]) --top;S[++top] = i, sum[top] = sum[top - 1] + (s2[i - 1] - s2[S[top - 1] - 1]) * height[i];if(is[sa[i]] == 1) ans += sum[top];}printf("%lld\n", ans);return 0;
}

转载于:https://www.cnblogs.com/cjoieryl/p/8457460.html

相关文章:

python字符照片_python图片转字符图片

python图片转字符图片代码话不多说&#xff0c;直接上代码。***************************#-*- coding:utf-8 -*-from PIL import ImageIMG#文件路径WIDTH60HEIGHT45ascii_char list("$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^…

三大基本排序专题

//以下依次是冒泡、选择、插入排序 var n,i:longint;a:array[0..20] of longint;procedure BUB;var i,j,t:longint;beginfor i:1 to n-1 dofor j:1 to n-i doif a[j]>a[j1] then begin t:a[j]; a[j]:a[j1]; a[j1]:t; end;end;procedure SEL;var i,j,k,t:longint;beginfor i:…

Linux内核中锁机制之完成量、互斥量

在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现&#xff0c;接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。 八、完成量 下面讨论完成量的内容&#xff0c;首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行&…

中国电子学会图形化四级编程题:绳子算法

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

域名登陆出现400_域名解析错误怎么办?

可能有些人在进行域名解析时会遇到解析错误的问题&#xff0c;遇到这样的问题该怎么办呢&#xff1f;今天小编给大家整理了一些思路&#xff0c;希望能够提供一些帮助给大家。网站域名设置目前域名解析服务很多都是由域名供应商来设置&#xff0c;也有用户在网站运营期间需要更…

第02章 PyTorch基础知识

文章目录第02章 Pytorch基础知识2.1 张量2.2 自动求导2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 CUDA是个啥2.3.3 做并行的方法补充&#xff1a;通过股票数据感受张量概念。本图文是Datawhale组队学习Pytorch的学习笔记&#xff0c;主要内容包括张量的概念&#xff08;0维…

一个简单的缓冲区溢出的思考

从大二开始真正接触技术开始&#xff0c;从最早的HTML&#xff0c;PHP&#xff0c;WEB开发。一直以为以后可能会从事开发的工作&#xff0c;碰巧大三上的时候和同专业的郭子&#xff0c;邹豪参加了南京的一个信息安全技能大赛&#xff0c;才真正找到了兴趣的方向&#xff0c;也…

Spring-boot+Vue = Fame 写blog的一次小结

前言 作为一个程序员&#xff0c;总是要有一个属于自己的博客。然后作为一个造轮子的程序员&#xff0c;肯定不满足于直接使用现有的博客系统&#xff0c;于是我便自己写了一个带后台管理的博客系统。 体验地址&#xff1a; zzzzbw.cn 技术选型 作为一个Javaer&#xff0c;服务…

gitee查看当前账号_upic+gitee图床,自由书写Markdown

使用的软件Typora&#xff1a;Markdown文档编辑器(https://www.typora.io/)upic&#xff1a;图床工具(https://github.com/gee1k/uPic)创建自己的GitHub图床1 创建账号https://gitee.com/,自行创建账号就可以了和github很相似&#xff0c;但是速度更快2创建仓库内容按照自己的习…

CentOS中vsftp安装与配置

1. 安装 使用chkconfig --list来查看是否装有vsftpd服务&#xff1b; 使用yum命令直接安装&#xff1a;yum -y install vsftpd 然后为它创建日志文件&#xff1a;touch /var/log/vsftpd.log 这样简单的两个命令就完成了vsftp的安装&#xff0c;但是如果你现在想这样ftp://your_…

纸上原型设计 VS 桌面原型工具设计,你更喜欢谁?

2019独角兽企业重金招聘Python工程师标准>>> 纸上原型设计&#xff0c;作为传统的原型设计方式&#xff0c;简单快速&#xff0c;成本低廉&#xff0c;为大部分设计师所喜爱。而桌面原型工具设计&#xff0c;作为伴随电脑科技发展而出现的原型设计方式&#xff0c;快…

韩宇:CV学习路线

CV学习路线 对于刚入门CV的同学来说&#xff0c;通过看视频学习效率会比看书高&#xff0c;如下是我亲身实践较为高效的CV学习路线。 1. 计算机视觉概述 计算机视觉本身又包括了诸多不同的研究方向&#xff0c;比较基础和热门的几个方向主要包括&#xff1a; 物体识别和检测…

mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速

有没有一种很好的方法来删除很多记录而不会减慢网站的速度&#xff1f;我需要从没有索引和主键的MySQL表中删除数百万条记录。我阅读了SO和网上的各种教程&#xff0c;基本策略是限制删除查询&#xff0c;在删除之间休眠一两秒钟&#xff0c;然后重复此过程直至完成。我也(使用…

某大型银行深化系统之二十:异常规范

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1异常抛出与捕捉规则 1.1任何抛出异常的方法必须先声明异常 {// Constructorpublic MyClass( String name ) throws NullPointerException, llegalArgumentException {...} } 1.2异常声明后&#xf…

女朋友的Mysql练习题

2019独角兽企业重金招聘Python工程师标准>>> 一、设有一数据库&#xff0c;包括四个表&#xff1a;学生表&#xff08;Student&#xff09;、课程表&#xff08;Course&#xff09;、成绩表&#xff08;Score&#xff09;以及教师信息表&#xff08;Teacher&#xf…

中国电子学会图形化四级编程题:解密

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

python函数模块概念_python中模块和包的概念

1.模块一个.py文件就是一个模块。这个文件的名字是&#xff1a;模块名.py。由此可见在python中&#xff0c;文件名和模块名的差别只是有没有后缀。有后缀是文件名&#xff0c;没有后缀是模块名。每个文件(每个模块)都是一个独立的名称空间&#xff0c;也就是说可以在两个(多个)…

linux-glibc内存管理小结2(内存相关系统调用的实现)

在上一节ptmalloc源码分析中我们提到dlmalloc向系统申请内存的方式有两种, 对应Linux系统下分别是sbrk()与mmap()系统调用. 本节我们就来看下brk()/sbrk()与mmap()/munmap()的实现, 作为切入点来一窥内核内存管理的特点. 在正文开始之前我们先大致描述一下内核内存管理的模型. …

【组队学习】【30期】7. CV中的Transformer

CV中的Transformer 航路开辟者&#xff1a;安晟领航员&#xff1a;尚育鹏航海士&#xff1a;安晟、袁明坤、闫永强 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/dive-into-cv-pytorch [第六章]内容属性&#xff1a;打磨课程内容说明&#xff1a;17年在…

天堂Lineage(單機版)從零開始架設教學

此篇文章 內容大部份連結 已失效&#xff0c; 我已另外寫一篇更快速安裝的文章。 前言: 網路遊戲天堂在數年前&#xff0c;被日本人分析封包的方式。模擬出Lineage server端的行為。 不像天堂II&#xff0c;及RO是由內部洩漏出Server端程式。也由於天堂Server的熱門以至於私服人…

python爬虫天气实例scrapy_python爬虫之利用scrapy框架抓取新浪天气数据

scrapy中文官方文档&#xff1a;点击打开链接Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛&#xff0c;可以用于数据挖掘、监测和自动化测试&#xff0c;Scrapy吸引人的地方在于它是一…

中国电子学会图形化四级编程题:绘制雪花

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

C++ Primer 读书笔记 - 第十三章

1. Initialization和Assignment不一样。其中Initialization包括direct-initialization (如A a(...))和copy-initialization (如 A a b;) 注意A a b为copy-initialization&#xff0c; 而A a; A b; a b;为Assignment。 2. We cannot copy objects of the IO types, so we can…

Linux-LNMP(静态元素不记录日志和过期时间,防盗链,解析php,代理,支持ssl)

Linux-LNMP-Nginx配置二 静态文件不记录日志和过期时间Nginx防盗链Nginx访问控制Nginx解析php相关配置Nginx代理Nginx负载均衡SSL原理生成SSL密钥对Nginx配置SSL静态文件不记录日志和过期时间在Nginx服务器的虚拟主机配置文件(/usr/local/nginx/conf/vhost/norecord.conf)中定义…

mysql数据库优化命令_MySQL数据库优化总结

一个&#xff1a;MySQL标准数据库优化注意事项1.数据库设计(表设计合理)三范式(规范的模式)三范式包含&#xff1a;第一范式&#xff1a;1NF是对属性的原子性的约束。要求属性具有原子性&#xff0c;不可再分解。(仅仅要是关系型数据库都满足)第二范式&#xff1a;2NF是记录的唯…

C++ 卸载程序

目的&#xff1a;用C写一个自己的卸载程序来完成程序的卸载工作&#xff0c;同时运行后要删除卸载程序本身&#xff0c;并删除卸载程序所在的文件夹。 注&#xff1a;在程序退出的时候写上 自己的卸载代码。 // FileName: Uninstall.h #pragma onceclass CUninstall { private:…

《火星救援VR》原班人马打造全新AR游戏,让可爱小飞龙伴随你左右

曾开发了《火星救援》的VR团队即将发布AR游戏《Follow Me Dragon》&#xff0c;让可爱小飞龙“融入”真实世界。 开发商The Virtual Reality Company曾经打造过风靡一时的《火星救援》VR游戏。今日&#xff0c;他们刚刚发布了一款名为《Follow me Dragon》的AR游戏。 目前&…

【组队学习】【30期】时间序列分析

时间序列分析 航路开辟者&#xff1a;李岳昆、易远哲领航员&#xff1a;王洲烽航海士&#xff1a;李岳昆、易远哲 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-data-mining/tree/master/TimeSeries内容属性&#xff1a;打磨课程内容说明…

mysql二进制日志管理_MYSQL二进制日志管理脚本

MYSQL二进制日志管理脚本脚本原理是每小时对进行flush生成新的二进制日志&#xff0c;将二进制日志备份至NFS&#xff0c;并压缩存放&#xff1a;#!/bin/bash#Purpose:管理二进制日志&#xff0c;每小时刷新二进制日志&#xff0c;并将日志复制到nfs服务器上&#xff0c;方便以…

iPhone App开发实战手册学习笔记(5)之IOS常用机制

1 前言 在IOS开发中&#xff0c;相信大家一定听说过委托&#xff0c;数据源&#xff0c;target&#xff0c;action等等&#xff0c;今天我们就来简单的学习一下这些内容。 2 详述 2.1 委托和数据源 大家是否曾经有不知道如何去执行一项任务的时候&#xff1f;或许是修理一台洗碗…