随笔分类 -  题解

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 21 下一页
题解
摘要:大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算。 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积。 数位DP,f[i][0/1]表示从高到低第i位,这一位没卡/卡了限制,的组合数之积,转移显然。 WA 8发,都想抽死自己。 阅读全文
posted @ 2018-11-07 09:05 HocRiser 阅读(195) 评论(0) 推荐(0)
摘要:模意义下除法若结果仍为整数的话,可以记录模数的所有质因子,计算这些质因子的次幂数,剩余的exgcd解决。 $O(n\log n)$但有9的常数(1e9内的数最多有9个不同的质因子),T了。 1 #include<cstdio> 2 #include<algorithm> 3 #define rep( 阅读全文
posted @ 2018-11-06 23:12 HocRiser 阅读(236) 评论(0) 推荐(0)
摘要:下面直接给出结论,相关证明见官方题解。 1.若跳蚤数不超过1或仅有两只跳蚤且相邻,则答案为-1。 2.若跳蚤形成的连通块个数大于1,则答案为0。 3.若跳蚤之间建图存在割点,则答案为1。 4.否则为2。 这样就有70分了。但是图太大了,显然有很多没用的跳蚤被统计进答案。 考虑到造成不连通的情况一定在 阅读全文
posted @ 2018-11-06 16:53 HocRiser 阅读(227) 评论(0) 推荐(0)
摘要:考虑O(n log n)的LIS求法,dp[i]表示到目前为止,长度为i的LIS的末尾最小是多少。 当当前数确定时直接用LIS的求法更新dp数组,当不确定时,由于这个数可以是任意数,所以可以接在任意上升子序列后面,于是相当于所有dp[i]=min(dp[i],dp[i-1]+1),也就是整个数组+1 阅读全文
posted @ 2018-11-05 17:43 HocRiser 阅读(196) 评论(0) 推荐(0)
摘要:[l,r]中所有数排序后能构成公差为k的等差数列,当且仅当: 1.区间中最大数-最小数=k*(r-l) 2.k能整除区间中任意两个相邻数之差,即k | gcd(a[l+1]-a[l],a[l+2]-a[l+1],...,a[r]-a[r-1]) 3.区间中任意两个数不相同,即设pre[i]为序列中i 阅读全文
posted @ 2018-11-05 15:15 HocRiser 阅读(228) 评论(0) 推荐(0)
摘要:先用树状数组求出g[i]表示长度为i的不降子序列个数。$O(n^2\log n)$ 容斥,最终序列长度为i的方案数为g[i]*(n-i)!,但这里多计算了在删得只剩i个数之前就已经构成不降子序列的情况。 这时考虑最后是从哪个不降子序列删掉一个数的,g[i+1]*(n-i-1)!*(i+1),这里显然 阅读全文
posted @ 2018-11-05 11:04 HocRiser 阅读(231) 评论(0) 推荐(0)
摘要:f[i][j]表示从小到大插入前i个数,有j个位置不合法(即有j对相邻数)的方案数。 转移时要考虑插入的位置以及i-1的情况,于是增设一维0/1/2记录i-1和左边的数相邻/和右边的数相邻/不和两边相邻。暴力转移即可。 阅读全文
posted @ 2018-11-05 09:05 HocRiser 阅读(193) 评论(0) 推荐(0)
摘要:对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果。 对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多少,这个操作通过将询问逆序使用并查集支持。 阅读全文
posted @ 2018-11-05 09:02 HocRiser 阅读(273) 评论(0) 推荐(0)
摘要:考虑n=1的做法,就是支持: 1.在线删一个数 2.在结尾加一个数 3.查询序列的第y个数 用线段树记录区间内被删元素的个数,可以通过线段树上二分快速得解,对于新增的数,用vector记录即可。 对于满分同样如此,对每行开一个线段树,再对最后一列单独开一个。 对于每次操作: 若在最后一列:就是对最后 阅读全文
posted @ 2018-11-03 20:23 HocRiser 阅读(263) 评论(0) 推荐(0)
摘要:将整个序列分成$\sqrt{n}$块,所有询问按左端点所在块为第一关键字,右端点所在块为第二关键字排序。 当右端点增加或左端点减小时,更新桶与答案。但是左端点增加时需要删除,这时就必须用堆等数据结构维护,复杂度多一个log。 回滚莫队是一个trick: 1.按同样的方法对所有询问排序,每次处理左端点 阅读全文
posted @ 2018-11-02 19:03 HocRiser 阅读(236) 评论(0) 推荐(0)
摘要:可以发现答案一定在所有向量终点形成的上凸壳上,于是在上凸壳上三分即可。 对于删除操作,相当于每个向量有一个作用区间,线段树分治即可。$O(n\log^2 n)$ 同时可以发现,当询问按斜率排序后,每个凸壳上的决策点也是单调变化的,于是可以记录每次的决策位置。$O(n\log n)$ $O(n\log 阅读全文
posted @ 2018-11-02 17:58 HocRiser 阅读(198) 评论(0) 推荐(0)
摘要:首先考虑一种暴力做法,为每条边拆成两条有向边,各建一个点。若某两条边有公共点,则在边所对应的点之间连一条边,权值为两条边中的较大值。这样跑最短路是$O(m^2\log m)$的。 用类似网络流中补流的方法,一条边拆成的两个点之间连权值为边的原权值的边(第一种边)。对于一个点,将所有以它为起点的边排序 阅读全文
posted @ 2018-11-02 10:43 HocRiser 阅读(272) 评论(0) 推荐(0)
摘要:最后数列一定是单峰的,问题就是最小化最后的位置序列的逆序对数。 从大到小加数,每次贪心看放左边和右边哪个产生的逆序对数更少,树状数组即可。 由于大数放哪对小数不产生影响,所以正确性显然。 注意相同数之间一定能不构成逆序对,需要特判。 阅读全文
posted @ 2018-11-02 10:32 HocRiser 阅读(189) 评论(0) 推荐(0)
摘要:先按y排序,二分,两边递归下去,然后处理下半部分对上半部分的贡献,即左下点在下半部分,右上点在上半部分的合法矩形个数。 两个部分均按x排序,枚举右上点p,则左下点需要满足: 1.横坐标大于上半部分纵坐标比p小的点的最大横坐标k。 2.不存在下半部分点满足纵坐标在两点之间,横坐标也在两点之间。 这样, 阅读全文
posted @ 2018-11-02 09:00 HocRiser 阅读(251) 评论(0) 推荐(0)
摘要:设a[i],b[i],c[i]分别为前i个数中J,O,I的个数,则一个区间[L+1,R]合法当且进当: a[r]-a[l]=b[r]-b[l]=c[r]-c[l]。 即a[l]-b[l]=a[r]-b[r],a[l]-c[l]=a[r]-c[r],b[l]-c[l]=b[r]-c[r]。 用map记 阅读全文
posted @ 2018-11-02 07:42 HocRiser 阅读(262) 评论(0) 推荐(0)
摘要:模板题,注意long long。 阅读全文
posted @ 2018-11-01 18:32 HocRiser 阅读(132) 评论(0) 推荐(0)
摘要:从小到大加数,根据加入的位置转移,裸的背包DP。 阅读全文
posted @ 2018-11-01 18:04 HocRiser 阅读(119) 评论(0) 推荐(0)
摘要:性质:最小生成树上任意两点间的最大边权,一定是这两点间所有路径的最大边权中最小的。证明显然。 阅读全文
posted @ 2018-11-01 18:02 HocRiser 阅读(169) 评论(0) 推荐(0)
摘要:从L开始从小到大暴力枚举。考虑到最后是让非零前缀数字个数最少,那么下面枚举的不可能在当前数的某个后缀零上变动。 于是每次将最后一位不是0的数字+1并统计答案即可。 每一位最多加了10次,一次是9的复杂度,最多9位,故复杂度O(810T)。 阅读全文
posted @ 2018-11-01 17:56 HocRiser 阅读(145) 评论(0) 推荐(0)
摘要:Trie模板题。求出每个前缀和后缀的最大异或和区间,枚举断点就可。不知为何跑得飞快。 阅读全文
posted @ 2018-11-01 17:33 HocRiser 阅读(161) 评论(0) 推荐(0)

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 21 下一页