CF1718B Fibonacci Strings 题解】的更多相关文章

原文链接https://www.cnblogs.com/zhouzhendong/p/CF117G2.html 题目传送门 - CF177G2 题意 定义斐波那契字符串如下: $s_1="a"$ $s_2="b"$ $s_i=s_{i-1}+s_{i-2}\ \ \ \ \ (i\geq 3)$ 给定 $k,m$,以及对应的 $m$ 组询问. 每组询问一个字符串 $x$ ,问 $x$ 在 $s_k$ 中出现了多少次. $k\leq 10^{18},m\leq 10^…
题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q\)次询问,每次询问给出两个长度相等的子串,问是否能从一个串变到另一个串. 题解 首先,我们发现操作不改变\(1\)的个数.所以可以先用前缀和判断\(1\)的个数是否相等. 如果某个字符串不出现相邻的两个\(1\),那么容易得到你无法做任何有效的操作,就直接判断是否相等.这一步可以用hash或sa或…
Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\),判断它们是否合法. 数据范围:\(1\leqslant n\leqslant 100,|s_i|\leqslant 100\) 且 \(s_i\) 仅由小写英文字母组成. Solution 这道题目关键的一点就在于:给字符串排序.我在 CF975A的题解 中曾详细讲过如何用 \(\texttt{sort}\)…
题意:定义斐波那契字符串为: $f_1 = $ "a" \(f_2 =\) "b" \(f_n = f_{n-1} + f_{n-2}, \, n > 2\) 例如,$f_3 = $ "ba". 有\(m\)次询问,第\(i\)次给出一个字符串\(s_i\),问\(s_i\)在\(f_n\)中的出现次数. \(m \leq 10^4, \, n \leq 10^{18}, \, \sum|s_i| \leq 10^5\) 主要问题在与\(f…
http://poj.org/problem?id=2406 就是给一个串,求其循环节的个数. 稍微想一下就知道,KMP中nxt数组记录了所有可与前面匹配的位置. 那么如果我们的循环节长度为k,有n个,那么我们最后一个nxt显然就会是k*(n-1). 倒推即可. #include<cstdio> #include<cstring> using namespace std; ]; ]={}; void getnext(int m){ ; ;i<=m;i++){ &&am…
Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为循环节,是可以铺满整串的.而且因为kmp[n]是尽量大的,所以这样得到的循环节长度为所有可能情况中最小的,也就是我们所求的. 而如果n%(n-kmp[n])≠0,可以认为之前的循环节匹配仍然可以进行,但是最后一个循环节被强行割掉了一些. #include<iostream> #include<…
题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) . 题目分析:设字符串长度为 \(m\) ,如果 \(m-1-nxt[m-1]\) 能够整除 \(m\) ,则 \(K=m/(m-1-nxt[m-1])\) ,否则 \(K=1\) . 实现代码如下: #include <cstdio> #include <string> using…
Content 有一个长为 \(n\) 的字符串 \(q\),试问能否将其划分为 \(k\) 个子串,使得每个子串的首字母都不相等,可以的话输出 \(\texttt{YES}\) 并输出任意一个方案,否则输出 \(\texttt{NO}\). 数据范围:\(1\leqslant n\leqslant 100,1\leqslant k\leqslant 26\). Solution 我们可以考虑这样的一个流程: 输入字符串后,一个一个去扫. 如果有一个之前没有出现过的字母,就立刻建立新的一个空子串…
Content 有一个长度为 \(n\) 的仅含小写字母的字符串 \(s\) 以及 26 个英文小写字母的价值 \(W_\texttt{a},W_\texttt{b},...,W_\texttt{z}\),请求出在后面插入 \(k\) 个小写字母后所能够获得的最大价值. 对于一个长度为 \(x\) 的字符串 \(s'\),它的价值为 \(\sum\limits_{i=1}^x i\times W_{s'_i}\). 数据范围:\(1\leqslant n\leqslant 1000,0\leqs…
Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通过执行 \(n\) 次上面的操作得到.现在给定 \(t\) 个字符串,求这些字符串是否合法. 数据范围:\(1\leqslant t\leqslant 10^4\),\(1\leqslant n\leqslant 26\). Solution 我们不妨弄两个指针,一个左指针,初始时指向第 \(1\)…