08 2016 档案

摘要:湘潭邀请赛的C题,哈密顿路径,边为有向且给定的所有边起点小于终点,怎么感觉是脑筋急转弯? 以后一定要牢记思维活跃一点,把复杂的事情尽量简单化而不是简单的事情复杂化。 阅读全文
posted @ 2016-08-30 13:51 vwirtveurit 阅读(322) 评论(0) 推荐(0)
摘要:曾写过迭代加深搜索的方法,现在使用在AC自动上跑最短路的方法 dp[i][j]表示状态为到节点i,模式串是否包含的状态为j的最短串的长度,则状态转移方程为: dp[nx][ny] = min(dp[x][y] + 1) , 其中nx为x后继结点,ny为从y转移过来的新状态,更新时加入队列 阅读全文
posted @ 2016-08-28 19:26 vwirtveurit 阅读(280) 评论(0) 推荐(0)
摘要:dp[i][j]表示行走i步到达j的最大值,dps[i][j]表示对应的串 状态转移方程如下: dp[i][chi[j][k]] = min(dp[i - 1][j] + sum[chi[j][k]]) 阅读全文
posted @ 2016-08-27 16:44 vwirtveurit 阅读(319) 评论(0) 推荐(0)
摘要:给定N个长度不超过20的模式串,再给定一个长度为M的目标串S,求在目标串S上最少改变多少字符,可以使得它不包含任何的模式串 建立Trie图,求得每个节点是否是不可被包含的串,然后进行DP dp[i][j]表示在Trie图上行走i步到达节点j的要修改的最小次数,则 dp[i + 1][chi[j][k 阅读全文
posted @ 2016-08-26 16:52 vwirtveurit 阅读(306) 评论(0) 推荐(0)
摘要:先使用AC自动机求得状态转移关系,再建立矩阵,mat[i][j]表示一步可从i到j且i,j节点均非终止字符的方案数,则此矩阵的n次方表示n步从i,到j的方法数。 阅读全文
posted @ 2016-08-26 11:24 vwirtveurit 阅读(231) 评论(0) 推荐(0)
摘要:数位DP加二分 阅读全文
posted @ 2016-08-25 19:41 vwirtveurit 阅读(257) 评论(0) 推荐(0)
摘要:注意添加到集合中的数是升序的,先将数据读入,再离散化。 sum[rt][i]表示此节点的区域位置对5取模为i的数的和,删除一个数则右边的数循环左移一位,添加一个数则右边数循环右移一位,相当于循环左移4位,线段树与树状数组结合,树状数组确定位置。 le[rt]表示左移的位数,区间更新懒惰标记 为什么我 阅读全文
posted @ 2016-08-24 14:07 vwirtveurit 阅读(430) 评论(0) 推荐(0)
摘要:树状数组,一个想法是当往p注水时,认为是其容量变小了,更新时二分枚举,注意一些优化。 阅读全文
posted @ 2016-08-13 22:27 vwirtveurit 阅读(276) 评论(0) 推荐(0)
摘要:判断图是否单连通,先用强连通分图处理,再拓扑排序,需注意: 符合要求的不一定是链拓扑排序列结果唯一,即在队列中的元素始终只有一个 阅读全文
posted @ 2016-08-10 10:20 vwirtveurit 阅读(169) 评论(0) 推荐(0)
摘要:正推,到达i的概率为p[i],要注意除了1和n外,到达i的概率并不一定为1 概率表达式为p[i] += p[j] / min(n - j, 6) 从j带过来的期望为exp[i] += exp[j] / min(n - j, 6) 又到达i时有价值val[i],到达i的概率为p[i],故exp[i] 阅读全文
posted @ 2016-08-09 21:03 vwirtveurit 阅读(199) 评论(0) 推荐(0)
摘要:渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了。 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1两个虚拟的狼,状态转移方程如下: dp[i][j] = min(dp[i][j], dp[i][k] 阅读全文
posted @ 2016-08-07 18:22 vwirtveurit 阅读(316) 评论(0) 推荐(0)
摘要:先记录以1为根时每个节点子树儿子节点的最大与次小值,询问x, y时,先判断x在不在y的子树范围内,若不在,结果为y的儿子结点,后继的最小值。 若x在y的子树范围内,若y儿子最小值是x的前驱,从次小值与父亲节点转移,否则从最小值与父亲节点转移。 阅读全文
posted @ 2016-08-06 22:50 vwirtveurit 阅读(324) 评论(0) 推荐(0)
摘要:二分思想,对所要花费的时间进行二分,再以模拟的形式进行验证是否可行。 使用二分法,可以将一个求最优解的问题转化为一个判定问题,优雅的暴力。 阅读全文
posted @ 2016-08-05 19:45 vwirtveurit 阅读(206) 评论(0) 推荐(0)
摘要:买酒 Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MBTotal Submission: 70 Submission Accepted: 22 Description 众所周知,西瓜是一个很爱喝酒的人。有一天西瓜和朋友去 阅读全文
posted @ 2016-08-05 16:12 vwirtveurit 阅读(211) 评论(0) 推荐(0)
摘要:状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解。 阅读全文
posted @ 2016-08-05 11:33 vwirtveurit 阅读(236) 评论(0) 推荐(0)
摘要:树状数组,与Turing Tree类似。 xr[i]表示从1到i的抑或,树状数组维护从1到i每个数只考虑一次的异或,结果为sum(r) ^ sum(l) ^ xr[r] ^ xr[l] 其中xr[r] ^ xr[l] 相当于l + 1到r出现奇数次的数的异或,sum(r) ^ sum(l)表示l + 阅读全文
posted @ 2016-08-05 10:13 vwirtveurit 阅读(316) 评论(0) 推荐(0)
摘要:应该是machine 和POJ3783 Balls类型相似。 现在上界为i元,猜错次数最多为j时,开始猜测为k元,有两种情况: 1 猜中:(i - k + 1) * dp[i - k][j] 2 猜不中 k * dp[k - 1][j - 1] 两种情况的均值即为第一次猜测为k时的期望,1 <= k 阅读全文
posted @ 2016-08-04 12:48 vwirtveurit 阅读(219) 评论(0) 推荐(0)
摘要:当初合肥区域赛的题(现场赛改了数据范围就暴力过了),可惜当初后缀数组算法的名字都没听过,现在重做下。 i从1到n - 1,每次枚举rank[i]附近的排名,并记录当起点小于i时的LCP(rank[i], d)的最大值,或是在LCP不变时更新起点。 加油吧! fighting!!! 阅读全文
posted @ 2016-08-04 11:06 vwirtveurit 阅读(471) 评论(0) 推荐(0)
摘要:引用罗穗骞论文中的话: 将n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,用和例3 同样的方法将后缀分成若干组,判断每组的后缀是否出现在不小于k 个的原串中。这个做法的时间复杂度为O(nlogn)。 阅读全文
posted @ 2016-08-03 17:25 vwirtveurit 阅读(247) 评论(0) 推荐(0)
摘要:引用罗穗骞论文中的话: 先将n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组。然后二分答案,再将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中,后缀的起始位置的最大值与最小值之差是否不小于当前答案(判断能否做到不重叠,如 阅读全文
posted @ 2016-08-03 17:17 vwirtveurit 阅读(191) 评论(0) 推荐(0)
摘要:一共6种情况,a < b且Aa < Ab, c < d 且Ac > Ad,这两种情况数量相乘,再减去a = c, a = d, b = c, b = d这四种情况,使用树状数组维护,le[i]表示i左边比他小的数数量,le1[i]表示i左边比他大的数数量,ri[i]表示i右边比他小的数数量,ri1[ 阅读全文
posted @ 2016-08-03 11:39 vwirtveurit 阅读(374) 评论(0) 推荐(0)
摘要:借用罗穗骞论文中的讲解: 计算A 的所有后缀和B 的所有后缀之间的最长公共前缀的长度,把最长公共前缀长度不小于k 的部分全部加起来。先将两个字符串连起来,中间用一个没有出现过的字符隔开。按height 值分组后,接下来的工作便是快速的统计每组中后缀之间的最长公共前缀之和。扫描一遍,每遇到一个B 的后 阅读全文
posted @ 2016-08-02 21:40 vwirtveurit 阅读(327) 评论(0) 推荐(0)
摘要:这题可以用后缀数组,KMP方法做 后缀数组做法开始想不出来,看的题解,方法是枚举串长len的约数k,看lcp(suffix(0), suffix(k))的长度是否为n- k ,若为真则len / k即为结果。 若lcp(suffix(0), suffix(k))的长度为n- k,则将串每k位分成一段 阅读全文
posted @ 2016-08-02 10:16 vwirtveurit 阅读(290) 评论(0) 推荐(0)