首页 > TAG信息列表 > Haoi2016

1026 [HAOI2016]放棋子 组合数学 错位问题

链接:https://ac.nowcoder.com/acm/contest/26656/1026来源:牛客网 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋

[HAOI2016]字符合并

luogu 题面 题目大意 有一个长度为 \(n\) 的 \(01\) 串,你可以每次将相邻的 \(k\) 个字符合并,得到一个新的字符并获得一定分数。 得到的新字符和分数由这 \(k\) 个字符确定。你需要求出你能获得的最大分数。 题目分析 因为所有的分数都不存在负数,所以我们肯定要选到不能选,也就是直

[HAOI2016]字符合并

一个长为 \(1\le n\le 300\) 的 01 串 \(a\),可以选长为 \(2\le k\le 8\) 的连续段 \([l,r]\) 替换为 \(c_x\in \{0,1\}\),得到 \(1\le w_x\le 10^9\) 价值,其中 \(x\) 表示 \(a:[l,r]\) 构成的二进制数。例如 10011 将中间三个字符替换为 1,会得到新字符串 111,而后续的操作均在新字

洛谷 P4248 [AHOI2013]差异 & P3181 [HAOI2016]找相同字符

链接 P4248 P3181 把这两道题放在一起是要讨论这样一个问题 对于一个已知 \(ht\) 的 \(S\),\(O(n)\) 求 \(\sum\limits_{1\le i<j\le n} lcp(i,j)\) 首先我们可以把上式写成 \(\sum\limits_{1\le i\le j}\sum\limits_{1\le j<i}lcp(i,j)\),也就是对于排序后的后缀的一个位置,我们只

LOJ - 2066 「HAOI2016」食物链 (拓扑排序)

题目 link 题目描述 见链接 输入格式 见链接 输入 10 16 1 2 1 4 1 10 2 3 2 5 4 3 4 5 4 8 6 5 7 6 7 9 8 5 9 8 10 6 10 7 10 9 输出 9 思路 拓扑排序,但是要计算路径的条数 生产者入度in必定为0,食物链的末端出度out必定为0 起点必有一条路径,也就是初始入度为0的点必定有一

「HAOI2016」地图

传送门 建出圆方树,两点之间所有简单路径经过的点集为圆方树上与路径上方点相邻的圆点。 若将 \(1\) 作为树根,那么一个点所能到达的区域为其子树,然后就线段树合并维护值域中出现奇偶次数即可。 复杂度 \(O((n + q)\log a + m)\)。 代码

P3181 [HAOI2016]找相同字符(SAM的应用)

传送门 ps:实际上用后缀数组会比较简单… 对串 A A A建立 S A M SAM

题解 [HAOI2016]字符合并

题目传送门 Description 有一个长度为 \(n\) 的 \(01\) 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。 得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 \(n\le 3\times 10^2,k\le 8\) Solution 我们可以观察到的是,为了最优,我们要尽

洛谷P3183 [HAOI2016]食物链

\(dp\)太菜了,紧急补课。就从入门题开始吧。。。 思路 其实这题我第一眼是没想到\(dp\)的,一下就看出是拓扑排序后简单递推了(递推也算\(dp\)吧。。。),切了。然后考虑到自己不会记忆化搜索,所以才学一波。 “记搜好就好在可以自动找出拓扑序”————zhx 那么既然这题可以用拓扑排序做

P3182 [HAOI2016]放棋子

给你一个 N∗N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放 N 枚棋子(障碍的位置不能放棋子),要求你放 N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案。 错排问题指考虑一个有 n 个元素的排列,若一个排列中

【BZOJ4566】[HAOI2016] 找相同字符(重拾后缀自动机)

点此看题面 大致题意: 问两个字符串有多少个相同子串,此处认为位置不同、本质相同的子串是不同的方案。 前言 为什么要说重拾后缀自动机啊,明明就从未真正学会过好不好。。。 简单的重拾后缀自动机 感觉以前的博客真是在瞎写,全都写得云里雾里的,根本就没什么干货。。。 今天花了一个多

luogu3181 [HAOI2016]找相同字符串

题目链接 solution 用后缀数组来处理。将两个字符串拼接到一起,然后跑一边后缀数组。 后面的如果暴力做的话,就是枚举一下相同字符串的起始位置,然后用\(height\)数组求一下这两个后缀的\(LCP\),答案加上\(LCP\)就行了。 然后考虑优化,枚举贡献,也就是枚举一个\(height_i\)找到以\(heigh

[HAOI2016]找相同字符(广义SAM)

[HAOI2016]找相同字符(广义SAM) 题面 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。 分析 此题有一个比较繁琐的后缀数组做法,但是用广义SAM可以秒杀。 把两个串建成广义SAM,对于每个后缀,记录\(

「HAOI2016」字符合并

题目描述 有一个长度为 $n$ 的 $01$ 串,你可以每次将相邻的 $k$ 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 $k$ 个字符确定。你需要求出你能获得的最大分数。 数据范围 $1 \leq n \leq 300, \ 0 \leq c_i \leq 1, \ w_i \geq 1, \ k \leq 8$ 题解 数据范

BZOJ 4565: [Haoi2016]字符合并 区间Dp+状压Dp

title BZOJ 4565 LUOGU 3736 Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 Input 第一行两个整数 \(n,k\)。 接下来一行长度为 \(n\) 的 \(01\)

P3183 [HAOI2016]食物链

原题链接  https://www.luogu.org/problem/P3183 一道经典的拓扑排序的题目~ 直接说思路吧: 1. 在输入的过程中,我们要统计每个点的出度和入度; 2. 进行一遍拓扑排序,同时给每个点维护一个 sum 值,表示从起点(入度为0的点)走到这个点有多少种方案,对于每条边的终点,它的 sum 值都要加上

P3183 [HAOI2016]食物链[拓扑/记忆化搜索]

题目来源:洛谷 题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不

[HAOI2016]放棋子

[HAOI2016]放棋子 有一\(N\times N\)的棋盘,有N个障碍物放入其中,已经给出其位置,并且保证每一行每一列有且仅有一个障碍物,现在再给你N个棋子,放入其中,保证每一行每一列有且仅有一颗棋子,询问其方案数。 解 根据错排自由定理,我们完全可以把障碍物按照行递增的方式的排序起来,即把障碍物全

「HAOI2016」字符合并

「HAOI2016」字符合并 题意: ​ 有一个长度为\(n\)的\(01\)串,你可以每次将相邻的\(k\)个字符合并,得到一个新的字符并获得一定分数。得到的新字符和分数由这\(k\)个字符确定。你需要求出你能获得的最大分数。(\(n\le 300,k\leq8\)) 题解: ​ 关键是要想到区间dp。记\(f[i][j][s]\),表示