题目大意:给一个长度为$n$的字符串$s$,字符串$p_i$为字符串$s$去掉第$i$个字符后形成的字符串。请给所有字符串$p_i$排序(相同字符串按编号排序)

题解:先去掉所有连续相同字符,因为它们形成的字符串一定相同(也就是说只按编号排序)。然后发现对于两个字符串$p_i,p_j(i<j)$只需要比较$s_i$与$s_{i+1}$的大小就可以比较这两个字符串的大小。即$p_i$只会排在$p_{i+1}\sim p_n$的前面或后面。所以可以用链表解决

卡点:

C++ Code:

#include <iostream>
#include <cstdio>
#include <algorithm>
#define maxn 1000010 int n, m;
int pos[maxn], len[maxn], nxt[maxn];
char s[maxn], p[maxn];
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> (s + 1);
for (int i = 1, j = i; i <= n; i = j) {
while (j <= n && s[i] == s[j]) ++j;
p[++m] = s[i], pos[m] = i, len[m] = j - i;
}
int L, R; L = R = m;
for (int i = m - 1; i; --i)
if (p[i] > p[i + 1]) nxt[i] = L, L = i;
else nxt[R] = i, R = i;
for (int i = L; i; i = nxt[i])
for (int j = 0; j < len[i]; ++j) std::cout << pos[i] + j << ' ';
return 0;
}

[洛谷P5329][SNOI2019]字符串的更多相关文章

  1. 洛谷$P5329\ [SNOI2019]$字符串 字符串

    正解:字符串 解题报告: 传送门$QwQ$ 有两个很妙的方法,分别港下$QwQ$ 首先为了表示方便,这里和题面一样设$s_i$表示去掉第$i$个字母得到的字符串.另设$lcp(i,j)$表示$suf_ ...

  2. 洛谷P4302 [SCOI2003]字符串折叠(区间dp)

    题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...

  3. 洛谷P4302 [SCOI]字符串折叠 [字符串,区间DP]

    题目传送门 字符串折叠 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS…S(X个S). 如 ...

  4. 洛谷P4094 - [TJOI2016]字符串

    Portal Description 给出一个字符串\(s(|s|\leq10^5)\)和\(m\)次询问,每次询问子串\(s[x_1..x_2]\)的所有子串和\(s[y_1..y_2]\)的最长公 ...

  5. luogu P5329 [SNOI2019]字符串

    传送门 显然要写一个排序,那只要考虑cmp函数怎么写就行了.第\(i\)个字符串和第 \(j\)个,首先前\(min(i,j)-1\)个字符是相同的,然后就是要比较后缀\(min(i,j)\)和\(m ...

  6. 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)

    题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...

  7. 洛谷1026(字符串dp)

    常规dp.看到数据很小就直接暴力了,没有预处理.kmp好像过分了-- #include <cstdio> #include <cstring> #include <ios ...

  8. 洛谷2758(字符串dp)

    题目传送 记得这是我初学dp时的一道题 虽说就像LCS一样搞一搞即可 但我还是写挂了qwq #include <cstdio> #include <cstring> #incl ...

  9. 洛谷$P5330\ [SNOI2019]$数论 数论

    正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...

随机推荐

  1. (10)Go结构体struct

    结构体 Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个 ...

  2. Java串口通信--------基于RXTX (附带资源地址)

    最近帮老师做了一个小项目,一个牧场公司想用传感器收集一些环境信息,记录到数据库里去,然后加以分析查看.这里面和传感器通信用到了串口通信,我也是接触了一下,把用到的东西分享出来. 准备工作: RXTX: ...

  3. dedecms 织梦二级菜单的调用

    <ul class="nav navbar-nav navlist"> <li class='nav-item'> <a href="htt ...

  4. Runtime Only和Runtime + Compiler

    如果你需要在客户端编译模板 (比如传入一个字符串给 template 选项,或挂载到一个元素上并以其 DOM 内部的 HTML 作为模板),就将需要加上编译器,即完整版 当使用 vue-loader ...

  5. 用docker构建redis cluster

    下面内容大部分借鉴自: http://louz.github.io/2016/08/11/docker-redis-cluster/ docker pull redis:3.0.7 #映射6379端口 ...

  6. [转]Json字符串和map和HashMap之间的转换

    需要导入alibaba.fastJsonmaven中的依赖为 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> ...

  7. Uni-app 使用总结

    1.去掉顶部导航 在page.json中添加 "globalStyle" : { "navigationBarTextStyle" : "black& ...

  8. (转)matplotlib实战

    原文:https://www.cnblogs.com/ws0751/p/8361330.html https://www.cnblogs.com/ws0751/p/8313017.html---mat ...

  9. c++ stl bind函数介绍

    /* stl::bind 使用 */ #include <iostream> #include <string> #include <functional> /* ...

  10. Linux MySQL 5.6.43 安装

    [注意] 1.首先安装在默认目录 /usr/local/mysql,如需更改数据存储目录,进行2.3两步 2.如果需要修改数据目录,将my.nf 中的 datadir=/usr/local/mysql ...