上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 69 下一页
摘要: 递推。 先对$a[i]$进行从小到大排序。 然后计算出每个点左边所有点到这个点的距离之和$L[i]$,以及右边每个点到这个点的距离之和$R[i]$。 这两个都可以递推得到。 $L\left[ i \right] = L\left[ {i - 1} \right] + \left( {i - 1} \ 阅读全文
posted @ 2016-08-29 12:50 Fighting_Heart 阅读(168) 评论(0) 推荐(0) 编辑
摘要: $dp$。 设$dp[i][j]$表示包含$i$个节点的最后一层有$j$个节点的树有多少种。 递推很简单,如果$j\% k = = 0$,那么$dp[i][j]$就要加上$dp[i-j][k]$的方案。 本地跑大约$500-600ms$左右的时间就可以打完表了,$sumbit$发现跑了$900$多$ 阅读全文
posted @ 2016-08-28 21:49 Fighting_Heart 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 构造。 先只考虑用$0$和$1$构造矩阵。 $n=1$,$\left[ 1 \right]$。 $n=3$,(在$n=1$的基础上,最外一圈依次标上$0$,$1$,$0$,$1$......) $\left[ {\begin{array}{*{20}{c}}0&1&0\\1&1&1\\0&1&0\e 阅读全文
posted @ 2016-08-28 10:46 Fighting_Heart 阅读(152) 评论(0) 推荐(0) 编辑
摘要: $dfs$,优化。 $return$操作说明该操作完成之后的状态和经过操作$k$之后的状态是一样的。因此我们可以建树,然后从根节点开始$dfs$一次(回溯的时候复原一下状态)就可以算出所有状态的答案。 对于$1$和$2$操作,可以开一个数组$a[i][j]$记录每一格子被操作$1$和$2$操作了几次 阅读全文
posted @ 2016-08-27 21:03 Fighting_Heart 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 数学,构造。 这题比较有意思,一开始没发现结论写了一个最坏复杂度为$O({10^9})$暴力居然能$AC$,正因为如此,我才发现了规律。 一开始是这么想的: 先假设$n$为直角边,设斜边长度为$c$,另一条直角边长度为$b$,因此有${c^2} - {b^2} = {n^2}$。 左边因式分解得到: 阅读全文
posted @ 2016-08-27 10:26 Fighting_Heart 阅读(467) 评论(0) 推荐(0) 编辑
摘要: 简单$dp$。 $dp[i][0]$:第$i$个串放置完毕,并且第$i$个串不反转,前$i$个串字典序呈非递减的状态下的最小费用。 $dp[i][1]$:第$i$个串放置完毕,并且第$i$个串反转,前$i$个串字典序呈非递减的状态下的最小费用。 那么可以得到以下递推式: 如果$s[i] > s[i 阅读全文
posted @ 2016-08-26 16:09 Fighting_Heart 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 简单题。 阅读全文
posted @ 2016-08-26 15:36 Fighting_Heart 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 排序,二分。 将$x$数组从小到大排序,每次询问的时候只要二分一下位置就可以了。 阅读全文
posted @ 2016-08-26 15:35 Fighting_Heart 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 十字链表。 开一个十字链表,矩阵中每一格作为一个节点,记录五个量: $s[i].L$:$i$节点左边的节点编号 $s[i].R$:$i$节点右边的节点编号 $s[i].U$:$i$节点上面的节点编号 $s[i].D$:$i$节点下面的节点编号 $s[i].V$:$i$节点存储的值 每次操作,只要把四 阅读全文
posted @ 2016-08-26 14:41 Fighting_Heart 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 字典树。 比较经典的题目了。把每一个数字都插入到字典树中,询问的时候如果$x$的第$i$位是$p$,那么尝试着在字典树上往$pXOR1$的节点走下去,没有$pXOR1$节点的话再走$p$的。删除操作的话可以记录一下每一个节点出现了几次,$Insert$的时候$s[p].cnt++$,$Delete$ 阅读全文
posted @ 2016-08-26 10:08 Fighting_Heart 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 简单题。 先把环上的贡献都计算好。然后再计算每一个$capital$ $city$额外做出的贡献值。 假设$A$城市为$capital$ $city$,那么$A$城市做出的额外贡献:$A$城市左边城市$L$和右边城市$R$都不能和$A$做出贡献,之前存在的$capital$ $city$和$A$城市 阅读全文
posted @ 2016-08-26 09:33 Fighting_Heart 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 数学,递推。 不知道有没有更加神奇的做法,我是这样想的: 首先,如果多边形完全在$y$轴左侧,那么答案为$\frac{w}{u}$。 剩下的情况就要先判断是否能在车开过之前跑过去,如果跑不过去,要在车慢慢开过$y$轴的时候,一起慢慢跑上去。 那么先来判断是否能在车开过之前跑过去: 如上图所示,如果要 阅读全文
posted @ 2016-08-25 21:24 Fighting_Heart 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 模拟。 阅读全文
posted @ 2016-08-25 17:10 Fighting_Heart 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 递推,预处理。 首先将已经占用了的时间开一个数组标$1$,例如$x$时间被占用了,那么$g[x]=1$。 然后从后往前进行递推,如果$g[x]=0$,那么$ans[x]=x$,否则$ans[x]=ans[x+1]$。 每一个询问$x$,直接输出$ans[x]$即可。 阅读全文
posted @ 2016-08-25 17:07 Fighting_Heart 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 离散化,树状数组,逆序数。 有$k$次机会交换相邻的数,因为只能交换相邻的数,所以只要逆序对还有,就必然可以通过交换相邻的数消灭一个逆序对。 因此,问题就简单了,只要算出原来的逆序对有多少,然后减去$k$就是答案,要注意的是,减去$k$之后如果$<0$了,那么答案为$0$。 因为$a[i]$较大,所 阅读全文
posted @ 2016-08-25 16:59 Fighting_Heart 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 模拟。 就把洗牌的过程模拟一下,开一个$map$记录一下某状态是否出现过,如果之前出现过,就意味着无解。 阅读全文
posted @ 2016-08-25 16:58 Fighting_Heart 阅读(139) 评论(0) 推荐(0) 编辑
摘要: $BFS$搜索。 问题分三个,最后一个是最简单的$BFS$,不再赘述。 前两个问题更简单了,说要紧贴着左边的墙走,紧贴着右边的墙走,那么这种路肯定是唯一的,模拟找一下就可以了。 以紧贴着左边的墙走为例: 假设人目前0的朝向是右边,我要走下一步了,首先要判断的是可不可以左转,如果可以,那么左转。 如果 阅读全文
posted @ 2016-08-25 16:56 Fighting_Heart 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 简单题。 阅读全文
posted @ 2016-08-25 08:50 Fighting_Heart 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 异或运算性质,离线操作,区间求异或和。 直接求区间出现偶数次数的异或和并不好算,需要计算反面。 首先,很容易求解区间异或和,记为$P$。 例如下面这个序列,$P = A[1]xorA[2]xorA[3]......xorA[15]$ $1$,$1$,$1$,$2$,$2$,$3$,$3$,$3$,$ 阅读全文
posted @ 2016-08-25 08:18 Fighting_Heart 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 离线操作,区间求和(线段树或树状数组)。 将询问按照$q[i].R$从小到大进行排序,然后逐个更新$a[i]$,如果之前$a[i]$不存在,那么直接更新进去,如果之前$a[i]$存在,那么把之前位置的$a[i]$删掉,更新成现在位置。这样操作就能保证:$i$位置更新完毕之后,存在的数都是不同的,并且 阅读全文
posted @ 2016-08-25 08:06 Fighting_Heart 阅读(238) 评论(0) 推荐(0) 编辑
上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 69 下一页