
字符串
wzf_2000
这个作者很懒,什么都没留下…
展开
-
【BZOJ1014】[JSOI2008]火星人prefix
题意:给出一字符串,每次:1、询问从第x个和第y个字符开始的字符串的lcq2、修改某字符3、在某字符后插入一字符(可以在开头)思路:发现又插入操作之后应该就是平衡树了,所以想splay。。然后lcq改为判断型问题(二分长度)每个节点记录一下它和它子树构成字符串的hash值。每次二分时判断一发就好感觉代码量好大。。调了好久。。代码:#include #def原创 2016-12-15 14:53:28 · 270 阅读 · 0 评论 -
【bzoj4567】[Scoi2016]背单词
这道题发现显然是让后缀在前面,儿子较大的先放最优一个trie就解决问题。(但是我size一开始写错卡了n久)#include #define gc getchar()#define ll long long#define N 610009using namespace std;int n,b[N];ll Ans;char a[N];bool cmp(const int &x原创 2017-08-04 09:23:28 · 507 阅读 · 0 评论 -
【bzoj3926】[Zjoi2015]诸神眷顾的幻想乡
首先一个串的不同子串和就是sam所有的st[i]-st[fail[i]]之和。 这题以每个叶子结点为根,dfs建立广义sam就好了。。(其实学过sam还是蛮简单的吧吧吧) (去年写的,代码似乎不忍直视?)#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#d原创 2017-08-05 08:53:23 · 383 阅读 · 0 评论 -
【bzoj1195】[HNOI2006]最短母串
此题似乎是一个dp。。 dp[i][j]表示选了i这个集合的字符串,最后一个是j的最短字符串。 (字典序顺便搞定) 然后发现需要处理掉一串为另一串子串的情况,特判一些特殊情况(或者奇怪的姿势)就好了。。 这题很卡空间,请务必不要乱开数组。#include <bits/stdc++.h>#define gc getchar()using namespace std;int n,len[1原创 2017-08-05 08:58:13 · 434 阅读 · 0 评论 -
【bzoj4566】[Haoi2016]找相同字符
典型的sa题。(可能可以sam?) 两串在中间加一个奇怪字符后连起来跑sa 从大到小枚举Height,统计它的贡献。然后每次统计完并查集合并。(应该可以链表搞,,然而我wa了,,还是改成并查集)#include <bits/stdc++.h>#define gc getchar()#define ll long long#define N 400009 using namespace s原创 2017-08-05 09:03:34 · 483 阅读 · 0 评论 -
【Codeforces176D】Hyper String
定义dp[pre][len]dp[pre][len]表示到TT的第prepre位,长度为lenlen的最长公共子序列在SS中出现位置最靠左的右端点位置(就是在满足最长公共子序列的长度为lenlen的情况下,第lenlen个字母在SS中最左边的位置)。 考虑如何转移: dp[pre][len]=min(dp[pre−1][len−1],与T[pre]相等且在S中的位置在dp[pre−1][len−原创 2017-09-26 16:54:25 · 419 阅读 · 0 评论 -
【Codeforces332E】Binary Key
题意:给出两个字符串p和s和一个正整数k,要求构造长度为k的01串,满足以下要求: 将其不断复制到长度大于等于|p|。对应p跑这个串,如果当前位置为1,则将p当前对应的字符加入一个串q的结尾。(开始为空串)最后得到的串q与s相等。输出满足要求的字典序最小的01串。|p| \leq 10^6,|s| \leq 200,k \leq 2000题解:按照模k的值分类,尽量让字典序小,通过哈原创 2017-12-20 08:05:16 · 483 阅读 · 0 评论