08 2016 档案
摘要:构造。 根据$a[0][0]$可以求得$0$的个数$p$,根据$a[1][1]$可以求得$1$的个数$q$。 如果找不到$p$或$q$,那么就无解。 每一个$0$放到序列中的任何一个位置,假设和前面的$1$产生了$x$对$10$,和后面的$1$产生了$y$对$01$,那么$x+y$一定等于$q$。
阅读全文
摘要:抽屉原理,快速幂,逆元,概率。 如果$k > {2^n}$,根据抽屉原理可知,答案就是$1$ $1$。 否则概率一定小于$1$,就要计算,公式很简单,上过概率论的应该都会算。 概率为:$1 - \frac{{({2^n} - 0)*({2^n} - 1)*({2^n} - 2)*({2^n} - 3
阅读全文
摘要:公式。 $a×C_{m + i - 1}^m + d×C_{m + i - 1}^{m + 1}$。 推导过程可以看http://blog.csdn.net/queuelovestack/article/details/52260127
阅读全文
摘要:博弈,$SG$函数,规律,线段树。 这个问题套路很明显,先找求出$SG$函数值是多少,然后异或起来,如果是$0$就后手赢,否则先手赢。修改操作和区间查询的话可以用线段树维护一下区间异或和。 数据那么大,一看就知道$SG$有规律...... 先写个小数据的$SG$找规律: bool f[200]; i
阅读全文
摘要:枚举,最短路。 求出5个点出发的最短路,然后枚举一下这些点之间走的顺序。
阅读全文
摘要:$dp$。 一开始想了一个$dp$做法,$dp[i][j]$表示前$i$个数字,下降序列长度为$j$的方案数为$dp[i][j]$,这样做需要先离散化然后用树状数组优化,空间复杂度为${n^2}$,时间复杂度为$O({n^2}\log n)$,这样的做法被$POJ$卡了内存。既然是$MLE$,然后我
阅读全文
摘要:后缀数组。 将两个串连接在一起,中间用一个字符隔开。然后对后缀进行排序。求出$height$数组。然后枚举相邻两个后缀,看看是否来自两个串,如果是,那么用$height$数组更新答案。
阅读全文
摘要:暴力。 判断是否$correct$的话开一个$map$就可以了。 如果不是correct的,那么就暴力去找单词。$abs\left( {len\left[ i \right] - lent} \right) > = 2$,满足这个条件的那些$s[i]$就不需要检查了,一定不可能。 如果$len[i]
阅读全文
摘要:$01$背包。 这个由于有个$Q$的限制,为了去掉后效性,每一个物品第二层的循环$j$最小可能是$Q-P$,那么就按照$Q-P$从小到大对物品排序。
阅读全文
摘要:暴力$dfs$。 先看数据范围,字符串最长只有$15$,也就是说枚举每个字符后面是否放置“$+$”号的复杂度为${2^{15}}$。 每次枚举到一种情况,看哪些位置能放“$=$”号,每个位置都试一下,然后判断一下是否可行。 最坏复杂度$O({2^{15}}*{15^2})$,事实上是达不到最坏复杂度
阅读全文
摘要:计数,模拟。 首先观察一下给出的图的特点: $1.$一定存在环。 $2.$可能存在多个环。 我们对每个环计算方案数,假设环$C$上包含$x$条边,那么把环$C$破坏掉的方案数有${2^x} - 2$种。 那么答案就是每个环的方案数乘起来,再乘上${2^p}$,$p$表示不在环上的边的条数。 找环的话
阅读全文
摘要:简单$dp$。 $dp[i][j][k]$表示:前$i$个位置染完色,第$i$个位置染的是$j$这种颜色,前$i$个位置分成了$k$组的最小花费。总复杂度$O({n^4})$。
阅读全文
摘要:简单题。 找一个不存在$0$的行,计算这行的和(记为$sum$),然后就可以知道$0$那个位置应该填的数字(记为$x$)。 如果$x<=0$,那么无解,否则再去判断每一行,每一列以及两个斜对角的和是否均为$sum$。需要注意的是$n=1$的时候,直接输出$1$就可以了。
阅读全文
摘要:$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$D$题 贪心。 我是这样贪的:开三个优先队列$q[0]$,$q[1]$,$q[2]$,$q[i]$存储对$3$取余之后为$i$的数。 首先看看还有没有$x\% 3 = 2$的$x$存在,如果有,那么这一次的$Arcane$ $Shot$就用在这
阅读全文
摘要:$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$J$题 贪心。 优先删除$power$大的点。
阅读全文
摘要:$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$H$题 排序,二分。 对$a$数组,$b$数组从小到大进行排序。 统计每一个$a[i]$作为较大值的时候与$b[i]$对答案的贡献。反过来再统计以$b[i]$为较大值时与$a[i]$对答案的贡献。 以前者举例说明: 观察这个:$⌊\sqrt {
阅读全文
摘要:$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$G$题 前缀和。 把公式化开来,会发现只要求一段区间的和以及一段区间的平方和就可以了。
阅读全文
摘要:$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$C$题 简单题。 注意题目中给出的数据范围:$1 \le ai < bi \le n$,说明这是一个有向无环图,并且哈密顿路一定是$1 \to 2 \to 3 \to \cdots \cdots \to n$。 因此这题就很简单了。哎,明明知道
阅读全文
摘要:$2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$A$题 循环节。 循环节为$2016$,从数据范围以及题目中的一句话也能间接的体会出应该是有循环节的,并且循环节可能是$2016$。 Feel free to think why the problem is called 2016 if yo
阅读全文
摘要:递推。 先对$a[i]$进行从小到大排序。 然后计算出每个点左边所有点到这个点的距离之和$L[i]$,以及右边每个点到这个点的距离之和$R[i]$。 这两个都可以递推得到。 $L\left[ i \right] = L\left[ {i - 1} \right] + \left( {i - 1} \
阅读全文
摘要:$dp$。 设$dp[i][j]$表示包含$i$个节点的最后一层有$j$个节点的树有多少种。 递推很简单,如果$j\% k = = 0$,那么$dp[i][j]$就要加上$dp[i-j][k]$的方案。 本地跑大约$500-600ms$左右的时间就可以打完表了,$sumbit$发现跑了$900$多$
阅读全文
摘要:构造。 先只考虑用$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
阅读全文
摘要:$dfs$,优化。 $return$操作说明该操作完成之后的状态和经过操作$k$之后的状态是一样的。因此我们可以建树,然后从根节点开始$dfs$一次(回溯的时候复原一下状态)就可以算出所有状态的答案。 对于$1$和$2$操作,可以开一个数组$a[i][j]$记录每一格子被操作$1$和$2$操作了几次
阅读全文
摘要:数学,构造。 这题比较有意思,一开始没发现结论写了一个最坏复杂度为$O({10^9})$暴力居然能$AC$,正因为如此,我才发现了规律。 一开始是这么想的: 先假设$n$为直角边,设斜边长度为$c$,另一条直角边长度为$b$,因此有${c^2} - {b^2} = {n^2}$。 左边因式分解得到:
阅读全文
摘要:简单$dp$。 $dp[i][0]$:第$i$个串放置完毕,并且第$i$个串不反转,前$i$个串字典序呈非递减的状态下的最小费用。 $dp[i][1]$:第$i$个串放置完毕,并且第$i$个串反转,前$i$个串字典序呈非递减的状态下的最小费用。 那么可以得到以下递推式: 如果$s[i] > s[i
阅读全文
摘要:排序,二分。 将$x$数组从小到大排序,每次询问的时候只要二分一下位置就可以了。
阅读全文
摘要:十字链表。 开一个十字链表,矩阵中每一格作为一个节点,记录五个量: $s[i].L$:$i$节点左边的节点编号 $s[i].R$:$i$节点右边的节点编号 $s[i].U$:$i$节点上面的节点编号 $s[i].D$:$i$节点下面的节点编号 $s[i].V$:$i$节点存储的值 每次操作,只要把四
阅读全文
摘要:字典树。 比较经典的题目了。把每一个数字都插入到字典树中,询问的时候如果$x$的第$i$位是$p$,那么尝试着在字典树上往$pXOR1$的节点走下去,没有$pXOR1$节点的话再走$p$的。删除操作的话可以记录一下每一个节点出现了几次,$Insert$的时候$s[p].cnt++$,$Delete$
阅读全文
摘要:简单题。 先把环上的贡献都计算好。然后再计算每一个$capital$ $city$额外做出的贡献值。 假设$A$城市为$capital$ $city$,那么$A$城市做出的额外贡献:$A$城市左边城市$L$和右边城市$R$都不能和$A$做出贡献,之前存在的$capital$ $city$和$A$城市
阅读全文
摘要:数学,递推。 不知道有没有更加神奇的做法,我是这样想的: 首先,如果多边形完全在$y$轴左侧,那么答案为$\frac{w}{u}$。 剩下的情况就要先判断是否能在车开过之前跑过去,如果跑不过去,要在车慢慢开过$y$轴的时候,一起慢慢跑上去。 那么先来判断是否能在车开过之前跑过去: 如上图所示,如果要
阅读全文
摘要:递推,预处理。 首先将已经占用了的时间开一个数组标$1$,例如$x$时间被占用了,那么$g[x]=1$。 然后从后往前进行递推,如果$g[x]=0$,那么$ans[x]=x$,否则$ans[x]=ans[x+1]$。 每一个询问$x$,直接输出$ans[x]$即可。
阅读全文
摘要:离散化,树状数组,逆序数。 有$k$次机会交换相邻的数,因为只能交换相邻的数,所以只要逆序对还有,就必然可以通过交换相邻的数消灭一个逆序对。 因此,问题就简单了,只要算出原来的逆序对有多少,然后减去$k$就是答案,要注意的是,减去$k$之后如果$<0$了,那么答案为$0$。 因为$a[i]$较大,所
阅读全文
摘要:模拟。 就把洗牌的过程模拟一下,开一个$map$记录一下某状态是否出现过,如果之前出现过,就意味着无解。
阅读全文
摘要:$BFS$搜索。 问题分三个,最后一个是最简单的$BFS$,不再赘述。 前两个问题更简单了,说要紧贴着左边的墙走,紧贴着右边的墙走,那么这种路肯定是唯一的,模拟找一下就可以了。 以紧贴着左边的墙走为例: 假设人目前0的朝向是右边,我要走下一步了,首先要判断的是可不可以左转,如果可以,那么左转。 如果
阅读全文
摘要:异或运算性质,离线操作,区间求异或和。 直接求区间出现偶数次数的异或和并不好算,需要计算反面。 首先,很容易求解区间异或和,记为$P$。 例如下面这个序列,$P = A[1]xorA[2]xorA[3]......xorA[15]$ $1$,$1$,$1$,$2$,$2$,$3$,$3$,$3$,$
阅读全文
摘要:离线操作,区间求和(线段树或树状数组)。 将询问按照$q[i].R$从小到大进行排序,然后逐个更新$a[i]$,如果之前$a[i]$不存在,那么直接更新进去,如果之前$a[i]$存在,那么把之前位置的$a[i]$删掉,更新成现在位置。这样操作就能保证:$i$位置更新完毕之后,存在的数都是不同的,并且
阅读全文
摘要:倍增预处理。 先看一下这张图的结构,因为出度都是$1$,所以路径是唯一的,又因为每个点都有出度,所以必然有环,也就是一直可以走下去。 接下来我们需要记录一些值便于询问: 设$t[i][j]$表示从$i$节点出发,走了${2^j}$步之后,到达的节点编号为$t[i][j]$。 设$s[i][j]$表示
阅读全文
摘要:答案的来源不外乎于3种情况: 纯粹走路,用时记为${t_1}$;纯粹乘车,用时记为${t_2}$;乘车一定距离,然后走路,用时记为${t_3}$。 但是${t_1}$显然不可能成为最优解。 前两个时间都挺好算的,${t_3}$算的时候要讨论一下。 如果是$a*k+t>=b*k$,那么也就是说第一个$
阅读全文
摘要:排序,$O(n)$扫描。 $city$与$tower$混在一起排序,然后从左到右扫描一遍,计算出每一个$city$左边的$tower$对他的影响。 再从右到左扫描一遍,计算出每一个$city$右边的$tower$对他的影响。然后再扫描一遍计算出$max$就可以了。
阅读全文
摘要:简单$dp$。 如果$a[i]>a[i-1]$,那么$dp[i]=dp[i-1]+1$。否则,$dp[i]=1$。答案为$dp[i]$中的最大值。
阅读全文
摘要:双指针。 先统计一下字符种类数$sum$,然后进行尺取。 如果目前的区间$[L,R]$中不同字符个数$k<sum$,那么区间右端往右移动一位,更新种类数。 如果目前的区间$[L,R]$中不同字符个数$k==sum$,更新答案,然后区间左端往右移动一位,更新种类数。
阅读全文
摘要:统计一下有多少行多少列被占领了。
阅读全文
摘要:每一组的和为$\frac{{2×\sum\limits_{i = 1}^n {a[i]} }}{n}$,然后暴力配对就可以了。
阅读全文
摘要:统计每一条边的贡献,假设$u$是$v$的父节点,$(u,v)$的贡献为:$v$下面大学个数$f[v]$与$2*k-f[v]$的较小值。
阅读全文
摘要:要保证总时间最短,因为总时间计的是最后一个人到达的时间,也就是最后一个人要求尽快到达,也就是说我们要让最后一个人乘车时间尽量多。再仔细想想可以发现每个人的乘车时间和走路时间都是一样的。 因此,可以二分每个人的乘车时间$m$,然后进行验证,如果发现某一个人的乘车时间不到$m$,那么$m$不可取,上界缩
阅读全文
摘要:并查集,构造。 先看一下图的特殊性,按照这种输入方式,一个点的入度最多只有$1$,因此,问题不会特别复杂,画画图就能知道了。 如果给出的序列中已经存在$a[i]=i$,那么随便取一个$a[i]=i$的$i$作为$root$,剩下的每一条边$a[i] \to i$,可以用并查集来处理,如果发现某条边$
阅读全文
摘要:简单$dp$。 记$dp[i][j]$表示$i$天过去了,并且第$i$天的时候是状态$j$的情况下,前$i$天最少休息天数。 递推式很容易得到: $dp[i][0]=min(dp[i-1][0],min(dp[i-1][1],dp[i-1][2]))+1$。$if\left( {1\& a\left
阅读全文
摘要:把每一个墙的位置都存下来。 如果墙的个数$sz>n+m$,显然无解。 否则枚举炸哪一行,假设枚举炸第$i$行,去掉第$i$行的所有墙,看剩下的墙是否处于同一列,如果是,那么这就是一个解。
阅读全文
摘要:快速幂,费马小定理,逆元。 设$dp[n]$表示$n$次操作之后的概率,那么$dp[n] = \frac{{(1 - dp[n - 1])}}{2}$。$1-dp[n - 1]$表示上一次没有在中间的概率,除以$2$表示$n$次操作之后的情况数是$n-1$次操作之后的两倍,所以要除以$2$,这个画画
阅读全文
摘要:思维,简单树$dp$。 首先计算出每一个子树包含多少个节点,记为$f[i]$。然后就可以从$root$开始推出所有节点的期望了。 现在已知$fa$节点的答案为$ans[fa]$,假设要计算$fa$的一个儿子$v$的期望,那么$ans[v]=ans[fa]+1.0+(f[fa]-f[v]-1)/2.0
阅读全文
摘要:计算几何,极角排序,双指针,二分。 直接找锐角三角形的个数不好找,可以通过反面来求解。 首先,$n$个点最多能组成三角形个数有$C_n^3$个,但是这之中还包括了直角三角形,钝角三角形,平角三角形,我们需要减去这些三角形的个数。 如果在$n$个点中找到了$A$个直角,那么必然有$A$个直角三角形。
阅读全文
摘要:思维,树形$dp$。 首先选择一个度不为$0$的节点作为根节点,将树无根转有根。 这题的突破口就是要求瞬间移动的次数最少。 次数最少,必然是一个叶子节点走到另一个叶子节点,然后瞬间移动一次,再从一个叶子节点走到另一个叶子节点,然后瞬间移动一次…… 因为叶子节点总数可能是奇数,可能是偶数,那么接下来要
阅读全文
摘要:$dp$,字典树。 $dp$递推式很容易知道。dp[i]=max{dp[j]+1} a[j]^..^a[i]<=X,并且$[j,i]$长度不能超过$L$。 但是暴力来复杂度极高,所以需要用字典树维护这个东西。将前缀异或和插入到字典树中,然后不断维护$a[i]$位置之前$L$个前缀异或和就好了。 跑了
阅读全文
摘要:首先要计算出每一条路最早开始的那一天,然后最晚结束的那一天。 这些天之间这条边都必须$open$,然后就变成一个线段树区间$+val$的问题了,最后询问一个每个点的$val$是多少。 注意:数据中有$ai>bi$的情况。
阅读全文
摘要:二分t+最大权闭合图。 很显然二分那个t作为limit。每一个limit下,有一些边不能用了,然后要知道这种情况下怎么选点获得的价值最大。 这么想:一个shop想获得收益,就必须选择某一些plant,问题就转化成了最大权闭合图。
阅读全文
摘要:因为原序列是排列好了的,那么只要看一下给出的两个区间相交的情况,然后分类讨论一下,O(1)输出。
阅读全文
摘要:处理出1-99的,之后的加上多少hundred和and即可。整百和一千的时候注意一下。
阅读全文
摘要:扫描线,树状数组求和。 横着的线的两个端点作为插入和删除,竖着的线作为询问。 遇到横着的线的左端点,那么那个位置+1, 遇到竖着的线,询问竖着那一段区间和是多少,区间和就是这条线对答案做出的贡献, 遇到横着的线的右端点,那么那个位置-1。
阅读全文
摘要:$dp$,矩阵加速。 设$dp[i][j][0]$表示:长度为$i$的两个字符串,之前还未出现过长度为$m$相同的,目前为止最后$j$个是相同的。 设$dp[i][j][1]$表示:长度为$i$的两个字符串,之前已经出现过长度为$m$相同的,目前为止最后$j$个是相同的。 递推式很容易写,$n$有点
阅读全文
摘要:树形dp。 先dfs一次处理子树上的最优解,记录一下回到这个点和不回到这个点的最优解。 然后从上到下可以推出所有答案。细节较多,很容易写错。
阅读全文
摘要:先不管神秘物品,看看把所有物品排成一排最长有多长。然后再搞搞就可以了。 数据谁了,自己造了1组数据。 T=1,n=1,a[1]=10000,ans=1
阅读全文
摘要:先思考一下序列上应该怎么做。 如果某段和为x,并且x为偶数,那么比x小的偶数,一定是这段的子段。 如果某段和为x,并且x为奇数,那么比x小的奇数,一定是这段的子段。 因此....只要寻找最大的连续的和为奇数的是多少,偶数的是多少。然后对询问就可以o(1)输出了。 推广到树上,就是只要计算路径上最大的
阅读全文
摘要:找规律。 11 3 1 3 5 7 1 3 5 7 9 11 13 15 .......
阅读全文
摘要:假设第一个人选的点为P,并且当作根,那么第二个人选的最优情况必然是根p连着的那些点中的一个。然后枚举一下P即可。
阅读全文
摘要:如果维护max,sum,那么可以得到一个暴力方法,如果t>=max,那可以return,否则往下更新,显然超时。 在上面基础上,再维护一下次大值,与最大值的个数。这样一来,次大值<t<最大值 这样的情况也可以更新完了之后直接return,pushDown的话也很好操作。 实践证明,这样的复杂度降到了
阅读全文
摘要:快速数论变换ntt。 早上才刚刚接触了一下FFT,然后就开始撸这题了,所以要详细地记录一下。 看了这篇巨巨的博客才慢慢领会的:http://blog.csdn.net/cqu_hyx/article/details/52194696 FFT的作用是计算卷积。可以简单的理解为计算多项式*多项式最后得到
阅读全文
摘要:开30W个vector将数字归类,每一类数字开一个指针P,记录已经阅读到哪一个了,还可以开一个优先队列维护这些指针P。
阅读全文
摘要:如果左括号数量和右括号数量不等,输出No 进行一次匹配,看匹配完之后栈中还有多少元素: 如果n=2,并且栈中无元素,说明是()的情况,输出No 如果n=2,并且栈中有元素,说明是)(的情况,输出Yes 如果n>2,并且栈中没有元素,或者有2个,或者有4个,输出Yes 如果n>2,并且栈中元素个数大于
阅读全文
摘要:dp[i]表示i子图的最小染色数目。 dp[i]=min( dp[i], dp[j]+1 ), j是i的子集,并且j图内的点没有边相连。 高效率枚举i子集的方法:for(int j=i;j;j=(j-1)&i) 每一个j都是i的子集。
阅读全文
摘要:该问题和xi,di均无关,碰撞只会使得速度反向,大小不会变。因此只要计算速度。
阅读全文
摘要:首先判断一下两个集合是否能够拓扑排序,顺便记录下每个节点的拓扑序。 然后看T2中每个点在T1中能够放在哪一个位置,记录下这个位置Pi。 然后T2中(按拓扑序排好),计算Pi的一个非严格递增的LIS。LIS长度就是答案。 这题scanf读入都900+ms了,有时直接卡TLE。改用gets整行读入,时间
阅读全文
摘要:构造。从a[i]最小的开始放置,例如放置了a[p],那么还未放置的,还需要建边的那个点 需求量-1,然后把边连起来。
阅读全文
摘要:搞了第三个栈来表示合并之后的。偷懒写了一个优先队列。
阅读全文
摘要:状压dp计算方案数。 dp[s]表示抽到s状态的牌的方案数有几种。 如果s状态已经获胜,那么答案可以加上dp[s]*剩余未抽的牌的全排列数,该状态不再向后转移。 如果s状态未获胜,但是还可以抽牌,那么方案数往后转移。 如果s状态未获胜,且不能抽牌,那么该状态也不再向后转移。
阅读全文
摘要:从a变到b,也就是将a一直除素因子,除到1为止,然后乘b的素因子,一直乘到b。 但是gcd(a,b)部分是不用除下去的。所以d(a,b)=a/gcd(a,b)的素因子个数+b/gcd(a,b)的素因子个数。 然后....脑洞开始...... 枚举这个因子P,然后去计算a/P的素因子个数+b/P的素因
阅读全文
摘要:方法太厉害了....看了官方题解的做法....然后...想了很久很久才知道他想表达什么....
阅读全文
摘要:背包变形。与普通的背包问题不同的是:允许有两个物品可以花费减半。 因此加一维即可,dp[i][j][k]表示前i个物品,有j个花费减半了,总花费为k的情况下的最优解。
阅读全文
摘要:背包变形。 将操作分为了两类,可以分开处理。 可以dp处理出L[i]:L[i]=-1代表从左到右 i 长度不能被拼凑出来,L[i]!=-1表示从左到右 i 长度能被拼凑出,并且最小费用为L[i]。 反着来一次dp就可以处理出R[i]:R[i]=-1代表从右到左 n+1-i 长度不能被拼凑出来,R[i
阅读全文
摘要:背包变形。dp[i][j][g][h]表示前i个数字,和为j,有g个必选,有h个必不选的方案数。 答案为sum{dp[n][j][2][2]}*4
阅读全文
摘要:将大于等于m的数改为1,其余的改为0。问题转变成了有多少个区间的区间和>=k。可以枚举起点,二分第一个终点 或者尺取法。
阅读全文
摘要:处理出每个位置左边的最大值和右边的最大值。然后就可以o(1)计算去掉某位置的最大值了。
阅读全文
摘要:后缀数组。排序之后得到height数组,然后从上到下将height>=len的都分为一组,然后找到第一组个数最多的输出即可。
阅读全文
摘要:贪心。 p<=q 答案为q-p。下面说p>q的情况。 可以疯狂的减到比q大一点的那个数,然后停顿一下,然后接着减。 也可以减到比q小的最大的那个数,然后再加回来,最后加回来的过程可以用之前停顿的抵消一些。
阅读全文
摘要:可以用总方案数减去经过障碍物的方案数。 先写一个判断某点是否可达的函数~ check(a,b) 再写一个某点到某点的方案数的函数~ cal(x1,x2,y1,y2) 设随便走 从(1,1)到(n,m)的方案数为P 设从(1,1)走到第i个障碍物并且不经过其余障碍物的方案数为num[i]。 那么 an
阅读全文
摘要:打表找规律。会发现答案是以1为首项,m为公比的等比数列的前n+1项和。
阅读全文
摘要:先处理出每一个i位置向左最远能到达的位置L[i]。每一次询问,要找到L,R区间中的p位置,p位置左边的L[i]都是小于L的,p位置开始,到R位置,L[i]都大于等于L,对于前者,最大值为p-L,后者求一个区间最大值即可。
阅读全文
摘要:矩阵快速幂。先要处理出第i列每个状态下,让该状态填满,下一列可以出现的状态。因为N较大,可以矩阵加速。
阅读全文
摘要:每条额外的边加入到图中,会导致树上一条路径成环,假设没有其余边,那么要将新图分成两部分,如果想删一条成环路径上的边,那么必须把这条额外边也删除。 因此每条额外边加入时,只需将环上的边+1。最后看看每条边被加了几次,被加了x次,也就是说删除这条边,至少还要删除x条边才能被分成两半,如果一次都没有被加,
阅读全文
摘要:可以先处理出每个a[i]最左和最右能到达的位置,L[i],和R[i]。然后就只要询问区间[ L[i],i-1 ]和区间[ i+1,R[i] ]最大值位置即可。
阅读全文
摘要:数位DP。dp[i][j][state] 表示最高位为i,数字为j,i位之后k-1个为state的方案数。例如1 2 3 4四个数字,state用1234表示。
阅读全文
摘要:dp[i][j]表示以a[i],b[j]为结尾的方案数,就是 k<i&&s<j 的dp[s][k]累加和。用个树状数组求和即可。
阅读全文
摘要:预处理出每个数字前面比它小的有几个,比他大的有几个,后面比他小的有几个,比他大的有几个。 先算出最多可能产生多少对,然后减去多加的就是答案。
阅读全文
摘要:求出(1,i-1)中与i构成回文的位置的和L[i],以及 i 与(i+1,n)中构成回文的位置和R[i]。 然后枚举每一对L[i]*R[i+1],累加和就是答案。 计算L[i]和R[i],可以利用manacher结果,o(n)处理得到。
阅读全文
摘要:dp+树状数组优化。 dp[i][j]表示以a[i]结尾,最长上升序列长度为j的方案数。dp[i][j]=sum{dp[k][j-1]} 其中k<i&&a[k]<a[i]。 离散化后,可以用1000个树状数组维护。
阅读全文
摘要:不会...看了题解这个公式就简单了:gcd(x^a-1,x^b-1)=x^gcd(a,b)-1。 那么只要枚举一下d,[1,n]内 gcd(a,b)=d的有几对,对答案做出的贡献为 pair[d]*(x^d-1)。 pair[d]容易计算:即[1,n/d]内 gcd(a,b)=1的有几对,那么就是2
阅读全文
摘要:题意转化一下就是寻找一个数P,要求P质因素分解完后,质因素没有重复,还要保证abs(P*P-x)最小。 暴力,在sqrt(x)附近向下向上分别枚举一下。
阅读全文
摘要:贪心一下。有k次机会,也就是那些数字中,最大的k-1可以不选择。答案为:sum{a[i]}-sum{最大的k-1个a[i]}+n。注意:k>=n的时候直接输出n。
阅读全文
摘要:猜了一下,发现对了。n>m是一定有解的。所以最多m*m暴力,一定能找到。而T较小,所以能过。
阅读全文