题解:P4171 [JSOI2010]满汉全席
说白了,这就是一个 $\texttt{2-SAT}$ 的模板题,大致可以分成三个部分。 首先是对于数据的处理。每一个评审员的输入都是两个字符串,而每个字符串都是由字母 $h/m$ 再加上材料编号组成的。因此只需要将其用 %s 读入后分开处理就行了。 ...
说白了,这就是一个 $\texttt{2-SAT}$ 的模板题,大致可以分成三个部分。 首先是对于数据的处理。每一个评审员的输入都是两个字符串,而每个字符串都是由字母 $h/m$ 再加上材料编号组成的。因此只需要将其用 %s 读入后分开处理就行了。 ...
这道题所用的算法是 $\texttt{Trie + DP}$。 我们设 $dp[i]$ 表示长单词 $S$ 的前 $i$ 个长度的方案数,则有(保证 $S_{j\cdots i}$ 是一个单词): dp[i] = dp[i] + \sum_{j = ...
读入整个字符串后统计 ( 与 ) 的个数是多少。 现在设左右括号需要再添加的个数为 $l,r$。 若读入一个 ( 则说明需要加上一个 ) 才能完整配对,即 ++r。 若读入一个 ) 则说明需要加上一个 ) 才能完整配对,此时有两种情况:$l = ...
将问题可以进行转化:求一张 $n$ 个点 $m$ 条边的有向图上还需要增加几条边才可以使图强连通。 由于是一张有向图,所以我们需要求出强连通分量,然后进行缩点并记录出度或入度为 $0$ 的点的个数,最后两者取 $\max$ 输出答案。 但需要注意的点...
将题目进行转化:在图中安装若干个太平井后,使得任意删除一个点,每个点双连通分量中都之后有一个太平井。 由题意可知,安装太平井,肯定与割点有关。因此,我们先求出无向图中的割点。 1234567891011121314151617181920void d...
这道题不难发现是一道搜索题 + 找规律题。 首先根据题意,可以发现若矩阵第一行与第一列被确定,那么整个矩阵中的元素也就能被一一确定。所以每个元素很可能可以根据第一行与第一列上的元素推导出来。需要注意的一点就是 $a[1][1]$ 这个元素,因为它是行...
对于一个 C++ 选手,一看数据范围就知道要用高精度来写。 先来考虑一个弱化版 满足 $a,b \le 10^8$。 因为要求出两数之间的斐波那契数的个数,所以我们可以预处理出 $10^8$ 以内的斐波那契数。 12f[1] = 1,f[2] = ...
这道题需要求字符串的子串中包含 bear 的个数。 最简单的算法是枚举子串的起始位置与结束位置,如果包含 bear,就将答案的数量 $+1$。但是分析复杂度可知,两层循环加上字符串的截取与查找,是无法通过总长度 $s = 5000$ 的,因此我们就要...
不妨设 $dp[i][j][k]$ 表示 $i$ 个圆盘从第 $j$ 杆移动到第 $k$ 杆的最小花费。现在要求 $n$ 个在第 $1$ 杆的圆盘移动到第 $3$ 杆上,因此最终的答案就是 $dp[n][1][3]$。 根据一般汉诺塔的移动方法,想要...
这道题目让我们从大到小输出连通块的大小及其对应的个数。 首先最容易想到的是开个二维数组,然后就是很裸的搜索题目。但是一看 $n$ 的数据范围是 $1 \le n \le 3 \times 10 ^ 4$,所以 $n$ 较大是肯定会 $\texttt{...