06 2020 档案
摘要:题意: 给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们。 题解: 首先,当另一个字符串是当前字符串的前缀时,这个字符串一定不可能是最小的,这一点可以用字典树实现。 然后,可能出现矛盾的情况,使得当前字符串不可能是最小,这里
阅读全文
摘要:参考博客https://blog.csdn.net/JKdd123456/article/details/84071856 字典树 是一种用于统计字符串、文本词频统计的入门级的数据结构。 基本性质 (1)根节点不包括字符,除根节点外每一个节点都只包含一个字符。 (2)用边表示字母 (3)从根节点到某
阅读全文
摘要:莫队算法 原博客地址https://www.cnblogs.com/WAMonster/p/10118934.html 题目背景 来一道题,给出一个序列,询问某一段区间中,包含多少种不同的数。 最简单的解法就是暴力,每次暴力遍历区间,这样的时间复杂度是无法接受的。 下面来做一个优化: 每次枚举到一个
阅读全文
摘要:题意: 给出一个2*n的矩形,你可以往里面填色。有黑和白两种颜色,会形成连通块(黑连通块和白连通块都算连通块)。询问有多少种填色情况使得连通块的数量有k个。 题解: 考试的时候没想出来,其实就是一个简单的线性DP。具体看代码。 //dp[i][j][k]表示到第i列,有j个块, 最后一列的情况是k
阅读全文
摘要:原博客地址:https://www.cnblogs.com/hyfhaha/p/10802604.html 问题的背景 来一道题: 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过。 注意:是出现过,就是出现多次只算一次。 我们将n个模式串建成一颗字典树。但是当我们匹配成功一个模式串后,
阅读全文
摘要:题意: 一次操作,可以使得一个三元组往右旋转一格,请你在N*N次操作以内使得一个序列变得有序。 题解: 模拟一个选择排序的过程,每次把之后最小的元素换到当前位置,正反做两遍。 #include<bits/stdc++.h> using namespace std; const int maxn=50
阅读全文
摘要:#include<iostream> #include<string.h> using namespace std; int main() { int n; cin>>n; int t=1; string s; string f="fork"; int sum=0; while(n--) { cin
阅读全文
摘要:题意: 给出一串序列,在位置为i的元素上,你可以向i+a[i]或i-a[i]的位置跳跃,前提是这两个位置在1到n的范围内。 请你计算每个节点,跳跃到与这个节点的元素值奇偶性不同的节点的最少步数。 题解: 反向建图,然后设两个超级源点,一个表示奇数,一个表示偶数,然后所有点向这两个源点连边,从这两个源
阅读全文
摘要:题意: 给出一个最大30*30的01矩阵,询问,最少修改几个节点,使得从起点(右上角)到终点(左下角)的所有路径全部为回文串。 题解: 考试的时候时间仓促,思考了正解的前面几步,最后的维护集合出了问题,思维还是要加强,不能C题都出不了。。。 思路就是,两个距离起点和终点距离相同的点必定要一样,也就是
阅读全文
摘要:题意: 给出两串序列a和b,每次操作可以选择其中一串序列,把它的前k个元素和最后k个元素交换,k<=n/2,询问是否有可能使得两个序列相等。 题解: 思考之后可以想到,数组中原来下标和为n+1的二元组,无论怎么交换,下标和永远是n+1。根据这个性质,可以提取出这些二元组,看看能不能完全匹配。 #in
阅读全文
摘要:题意: 在给定的序列中选择一个子序列,假设子序列里有k个数,当至少有max(1,k-2)个数在二进制第i位上为1的时候,对答案有2^i贡献。 题解: 假设选了k个数,那么根据题面,假设有大于等于k-2个数包含二进制的第i位。 现在从k个数中任选3个,如果原来有大于等于k-2个数包含二进制的第i位,那
阅读全文
摘要:题意: 给出一个图,每个顶点有一个目标权值,请你设计一个访问顺序,使得节点被访问时的权值是目标权值。 节点当前权值设定为与它相连的所有节点中已被访问的节点的权值之外的最小值。 题解: 合法的条件就是,每个节点周围必须有w[i]-1个不同的节点,且最大值要是w[i]。 然后考试的时候我写了一个类似于拓
阅读全文