摘要: 最大生成树。 仔细想想会发现和坐标并没有任何关系,$king$要到达任何地点,也就是说给出的图中不能有环,因此对原图求最大生成树,不在最大生成树上的边就是要删除的,而且数量最小,费用最小。阅读全文
posted @ 2017-09-09 07:16 Fighting_Heart 阅读(38) 评论(0) 编辑
摘要: 矩阵快速幂。 一开始的思路是$dfs$出一个矩阵,$k[i][j]$表示这一行是状态$i$,将这一行填满,下一行是$j$状态的方案数。然后就可以矩阵快速幂了,但是矩阵大小是$16*16$的,超时了...... 仔细观察后会发现,第$0$行状态为$0$,因此往后填充的过程中,并不会出现16种情况,只会阅读全文
posted @ 2017-09-08 09:25 Fighting_Heart 阅读(28) 评论(0) 编辑
摘要: 线段树。 假设只有一种颜色,因为每次询问有一个$x$一定是$1$,那么我可以想办法找出每一个$y$最小的$x$是多少,如果最小的都不符合,那么一定不符合,因为更新变成了单点更新,询问是区间询问最小值,搞个线段树即可。有$51$种颜色,可以搞$51$个线段树。阅读全文
posted @ 2017-09-08 08:53 Fighting_Heart 阅读(58) 评论(0) 编辑
摘要: 可持久字典树。 询问子树可以转化为询问一段区间,因此可以对树的$dfs$序进行操作。因为是在一群数字中找一个数字和已知数字异或最大,所以可以想到字典树。保存前缀字典树,然后询问区间$[L,R]$的时候,只要$R$的字典树减去$L-1$的字典树就是区间$[L,R]$上的的数字构成的字典树。阅读全文
posted @ 2017-09-08 08:46 Fighting_Heart 阅读(43) 评论(0) 编辑
摘要: 栈。 将数字排序后,一个一个压入栈。如果栈顶两个元素形成了对子,那么$ans+1$,弹出栈顶两个元素;如果栈顶三个元素形成了顺子,那么$ans+1$,弹出栈顶三个元素。阅读全文
posted @ 2017-09-08 08:42 Fighting_Heart 阅读(46) 评论(0) 编辑
摘要: 保存前缀后缀。 保存一下前缀和后缀,去掉第$i$个位置,就是$L[i-1]$和$R[i+1]$进行运算。阅读全文
posted @ 2017-09-08 08:40 Fighting_Heart 阅读(20) 评论(0) 编辑
摘要: 暴力。 $k$的$k$次方在$k=15$的时候,达到了最大不爆掉的情况。阅读全文
posted @ 2017-09-08 08:39 Fighting_Heart 阅读(6) 评论(0) 编辑
摘要: 小数据打表,大数据暴力。 导致超时的主要原因是$m$小的询问次数太多,可以把$m≤10$的答案直接暴力打表存起来,$m>10$的用$C$题的方法即可。阅读全文
posted @ 2017-06-03 20:47 Fighting_Heart 阅读(98) 评论(0) 编辑
摘要: 暴力。 $O(m*n)$的算法可以通过此题,每次询问$O(m)$扫$S$数组,统计不同数字的个数,每次移动最多只会变化两个数字,如果不同数字个数为$0$,那么答案加$1$。阅读全文
posted @ 2017-06-03 20:42 Fighting_Heart 阅读(38) 评论(0) 编辑
摘要: 暴力。 暴力枚举$S$串的每一个长度为$m$的子串,排序判断即可。阅读全文
posted @ 2017-06-03 20:38 Fighting_Heart 阅读(25) 评论(0) 编辑
摘要: 贪心。 从大到小排序之后进行模拟,注意$n=1$和$n=0$的情况。阅读全文
posted @ 2017-06-03 20:35 Fighting_Heart 阅读(31) 评论(0) 编辑
摘要: $dp$。 记录$dp[i]$表示以位置$i$为结尾的最大值。 枚举最后一段是哪一段,假设为$[j,i]$,那么可以用$max(dp[1]...dp[j-1]) + val[j][i]$去更新$dp[i]$。 判断区间是否合法可以记录选择每个位置必须需要取到的最小位置和最大位置,判断区间合法性的时候阅读全文
posted @ 2017-06-01 19:28 Fighting_Heart 阅读(51) 评论(0) 编辑
摘要: 离线,树状数组。 数据范围好像有点小,直接暴力可以过的。 我直接上了$n,Q≤100000$的做法:只需要判断区间上比$x$小的数字有几个即可,可以对询问进行离线操作,从左到右一个一个数字插入到树状数组中。阅读全文
posted @ 2017-06-01 19:25 Fighting_Heart 阅读(36) 评论(0) 编辑
摘要: 数位$dp$。 $dp[i][j][k][s]$表示最高位有$i$位,并且最高位为数字$j$,这些数字的最小公倍数为$k$,被$2520$取余的结果为$s$的方案数。 被每一个数字都要整除,就是被这些数字的最小公倍数整除。$1$到$9$的随便选数字的最小公倍数只有$48$种。 $A\%B = A\%阅读全文
posted @ 2017-05-23 08:11 Fighting_Heart 阅读(21) 评论(0) 编辑
摘要: 分块,暴力。 将序列分成$sqrt(n)$块,每块$sqrt(n)$个元素,每块内排序。 每次操作要计算这个区间中比$a[p1]$大的有几个,小的有几个,比$a[p2]$大的有几个,小的有几个,端点的块内暴力找,中间的块内二分找。 交换完数字之后,可以直接重新$sort$排个序。 总体时间复杂度$O阅读全文
posted @ 2017-05-17 18:37 Fighting_Heart 阅读(20) 评论(0) 编辑
摘要: 枚举,容斥原理,范德蒙恒等式。 先预处理每个位置之前有多少个左括号,记为$L[i]$。 每个位置之后有多少个右括号,记为$R[i]$。 然后枚举子序列中第一个右括号的位置,计算这个括号的第一个右括号的方案数。 即在它左边取$k$个左括号,在右边取$k-1$个右括号都是合法的方案,这个东西可以用范德蒙阅读全文
posted @ 2017-05-17 18:33 Fighting_Heart 阅读(36) 评论(0) 编辑
摘要: 二分。 如果$n≤m$,显然只能$n$天。 如果$n>m$,至少可以$m$天,剩余还可以支撑多少天,可以二分计算得到,也可以推公式。二分计算的话可能爆$long$ $long$,上了个$Java$。阅读全文
posted @ 2017-05-17 18:27 Fighting_Heart 阅读(49) 评论(0) 编辑
摘要: 简单判断。 找第一类区间中$R$最大的,以及第二类区间中$L$最小的,判断距离。 找第二类区间中$R$最大的,以及第一类区间中$L$最小的,判断距离。 两种情况取个最大值即可。阅读全文
posted @ 2017-05-17 18:25 Fighting_Heart 阅读(20) 评论(0) 编辑
摘要: 简单判断。 分别判断每个单词是几面体,加起来就是答案。阅读全文
posted @ 2017-05-17 18:22 Fighting_Heart 阅读(10) 评论(0) 编辑
摘要: 区间$dp$。 倒着考虑这件事件,肯定有最后一个取走的数字,假设是$a[k]$,那么最后一次取走的价值肯定是$a[0]*a[k]*a[n+1]$,之前取走的价值和为$[1,k-1]$的价值加上$[k+1,n]$的价值。 设$dp[L][R]$表示取完区间$[L,R]$的最大价值,$dp[L][R] 阅读全文
posted @ 2017-05-15 08:23 Fighting_Heart 阅读(119) 评论(0) 编辑