题解 P5329 【[SNOI2019]字符串】
用栈的做法来水一发。
首先我们有一个暴力的做法,枚举每个被删除的字符,然后排序输出,时间复杂度:$ O ( N \times N \times LogN ) $ 。
然后我们观察一下数据,发现有一个数据点且任意两个相邻字符 $ a_i $ 与 $ a_{i+1} $ 不相等;那么我们考虑这样一个字符串: $ acdedc $ 。比如现在我们比较去掉第三位的字符串和去掉第四位的字符串。我们发现 $ acddc $ 比 \(acdec\) 小,然后我们再发现除 $ 3,4 $ 位的以外的都是一样的,所以直接比较第三位第四位就可以啦。现在就是要考虑去掉当前位置如何与前面所有的字符串比较。我们发现一旦去掉第二位比第三位来的大那么后面不管去掉哪一位都不可能超过第二位。同理如果当前这一位比不过后一位的话,接下来的所有位他都比不过,就可以直接输出了。 所以我们把后面所有字符串都打不过的位置用栈记下来,把后面所有字符串都打得败的直接输出,这样我们就又多了 \(20\) 分的好成绩。
现在我们考虑有相邻有重复的情况,显然我们可以把相邻一样的区间看成一个字母来做,这样就可以 $ O( N ) $ 实现。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<stack>
#define INF 1LL<<62;
#define ll long long
#define For(X,From,To) for(ll X=From;X<=To;X++)
using namespace std;
const int MAXN=1e6+5;
char Str[MAXN];
ll N,Cnt,Ans[MAXN],Last,S[MAXN];
bool Flag;
ll QP(ll B,ll K){ ll Ans=1;for(;K;K>>=1) Ans*=(K%2)*B;return Ans;}
template<class T>void Read(T &X){
X=0;int F=0;char Ch=getchar();
while(Ch<'0' || Ch>'9'){ F|=(Ch=='-');Ch=getchar();}
while(Ch>='0' && Ch<='9'){ X=X*10+(Ch^48);Ch=getchar();}
X=F? -X:X;
}
template<typename T>
inline void Write(T X){
if(X<0){
putchar('-');
X=-X;
}
if(X>9) Write(X/10);
putchar((X%10)^48);
}
int main(){
Read(N);
scanf("%s",Str+1);
Last=1;//用Last来记录一段区间一样的字母的最左端,初始是最左端。
For(i,2,N)
if(Str[Last]>Str[i]){//一旦这个区间不如当前的字母,那么后面所有的字符串都可以打败他,所以可以直接输出。
for(int j=Last;j<i;j++){
Write(j);putchar(' ');
}
Last=i;
}else
if(Str[Last]<Str[i]){//否则后面就没有字母可以打败他,加入到栈里。
for(int j=i-1;j>=Last;j--) S[++Cnt]=j;
Last=i;
}
for(int i=Last;i<=N;i++){//最后还剩一个区间别忘了。
Write(i);putchar(' ');
}
while(Cnt){//输出栈里的所有元素。
Write(S[Cnt]);putchar(' ');
Cnt--;
}
return 0;
}//完美撒花。qwq
qwq
题解 P5329 【[SNOI2019]字符串】的更多相关文章
- [洛谷P5329][SNOI2019]字符串
题目大意:给一个长度为$n$的字符串$s$,字符串$p_i$为字符串$s$去掉第$i$个字符后形成的字符串.请给所有字符串$p_i$排序(相同字符串按编号排序) 题解:先去掉所有连续相同字符,因为它们 ...
- luogu P5329 [SNOI2019]字符串
传送门 显然要写一个排序,那只要考虑cmp函数怎么写就行了.第\(i\)个字符串和第 \(j\)个,首先前\(min(i,j)-1\)个字符是相同的,然后就是要比较后缀\(min(i,j)\)和\(m ...
- 洛谷$P5329\ [SNOI2019]$字符串 字符串
正解:字符串 解题报告: 传送门$QwQ$ 有两个很妙的方法,分别港下$QwQ$ 首先为了表示方便,这里和题面一样设$s_i$表示去掉第$i$个字母得到的字符串.另设$lcp(i,j)$表示$suf_ ...
- 【LOJ#3095】[SNOI2019]字符串(后缀数组)
[LOJ#3095][SNOI2019]字符串(后缀数组) 题面 LOJ 题解 首先画图看看如何比较两个串的大小,发现这个东西等价于求两个相邻的后缀的\(LCP\). 一个做法是求出\(SA\),然后 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- [SNOI2019]字符串
名称:字符串 来源:2019年陕西省选 题目内容 传送门 洛谷(P5392) 题目描述 给出一个长度为$n$的由小写字母组成的字符串$a$,设其中第$i$个字符为$a_i(1≤i≤n)$. 设删掉第$ ...
- 【题解】【字符串】【BFS】【Leetcode】Word Ladder
Given two words (start and end), and a dictionary, find the length of shortest transformation sequen ...
- HDU1004题解分析(字符串处理)
这道题是从上个星期开始做的,看到题时觉得似曾相似,好像做过,理了一下思路敲完代码又不对,后来发现是数组用错了,之后又重新想了数组和比较用法,昨天改了一个多小时,后来样例输出全部正确,所有情况都考虑到了 ...
- leetcode题解之分解字符串域名
1.题目描述 A website domain like "discuss.leetcode.com" consists of various subdomains. At the ...
随机推荐
- bootstrap4中bootstrap_treeview不显示图标原因以及解决办法
1.bootstrap4中bootstrap_treeview不显示图标原因 查看过大神的博客,经过自己试验,插件依赖: bootstrap/3.3.7 jquery/3.3.1 <link h ...
- SSM的医院管理系统录像
视频观看地址:http://mp.toutiao.com/preview_article/?pgc_id=6806135073323090444
- blesta运行造成阿里云服务器CPU频繁超载的原因分析
博主在阿里云服务器上安装了主机软件Blesta后,阿里云后台频繁提示CPU超载,打开突发性能模式后,发现CPU负载到了100%.如下图所示: 直接在putty里面reboot整个系统后,负载瞬间降为2 ...
- STM32 TIM1高级定时器RCR重复计数器的理解
STM32 TIM1高级定时器RCR重复计数器的理解 TIMx_RCR重复计数器寄存器,重复计数器只支持高级定时器TIM1和TIM8,下面看标准外设库的TIM结构体的封装: typedef struc ...
- 你的团队需要一个正确的程序集(dll)管理姿势
很多团队经历时间的积淀之后,都会有很多的可重用的公共技术组件.大部分的团队都会把这些公共组件生成程序集(dll)后,放到GIT或SVN的一个公共目录里面,以供各个项目中使用.起初在项目很少又或者是公共 ...
- 分布式锁-Redission-Lock锁的使用与原理
环境准备 添加 Maven 依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>re ...
- 豹子安全-注入工具-疑问_MySQL_基于联合查询_按钮【获取基本信息】不能成功的解决方法。
豹子安全-注入工具-疑问_MySQL_基于联合查询_按钮[获取基本信息]不能成功的解决方法. 网站: http://www.leosec.net 如下GIF影片所示:
- ereg正则%00截断
0x01 <?php $flag = "xxx"; if (isset ($_GET['password'])) { if (ereg ("^[a-zA-Z0-9] ...
- 暴力破解-HTTP Basic认证
0x01 HTTP Basic认证介绍 基本认证 basic authentication ← HTTP1.0提出的认证方法 基本认证步骤: 1. 客户端访问一个受http基本认证保护的资源. 2. ...
- Nginx 、MySQL、Django 在 Docker-compose 中的部署
概述 本文主要记录了在 Linux 3.10.0-1062.el7.x86_64 下使用 docker-compose 搭建服务的过程,由于公司服务器在内网中,搭建镜像及下载依赖时需要外部代理,如果本 ...