Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

10 2019 档案

摘要:T1: 求pi=0iqp的值。 发现从0枚举很鸡肋。 \begin{array}{ll} 2ans &=& 2\sum \limits_{i=1}^p \lfloor \frac{iq}{p} \rfloor \ 阅读全文
posted @ 2019-10-31 15:40 hz_Rockstar 阅读(232) 评论(1) 推荐(0) 编辑
摘要:T1: 高精度复杂度不允许,但是我们只关注相对大小,所以可以对答案取对数。 lg(XY)=YlgX lg(Y!)=Yi=1lgi 直接比较即可。 时间复杂度O(n)。 T2: 考虑对序列进行差分。 差分后区间加减转化为对相距k的两个数同时加上两个相 阅读全文
posted @ 2019-10-31 15:10 hz_Rockstar 阅读(188) 评论(1) 推荐(1) 编辑
摘要:T1: 将序列求前缀和,题意转化为对于位置ij,满足i<jai<aj并且bi<bj,最大化ji+1的值。 典型的三维偏需,可以CDQ做。 更好的做法是按一维排序,然后用数状数组维护。 时间复杂度O(nlogn)。 T2: 每次可以选择一个根,将左右子树接上, 阅读全文
posted @ 2019-10-30 21:40 hz_Rockstar 阅读(356) 评论(0) 推荐(0) 编辑
摘要:T1: 显然每个数是独立的。 无解情况的判定用裴蜀定理即可 用exgcd求出一组特解,对于每个数,只需要求出使|x|+|y|最小的一组解即可。 最优解一定取在xy接近0时,取个min即为答案。 时间复杂度O(n)。 T2: 根据贪心思想。 考虑两个数对$(a_i,b_ 阅读全文
posted @ 2019-10-29 17:24 hz_Rockstar 阅读(140) 评论(0) 推荐(0) 编辑
摘要:T1: 考虑特殊构造,使不同段不会相互影响。 分块构造,大段递减,小段递增。 最长下降子序列即为段数,最长上升子序即为最长的一段的长度。 特判无解情况,然后分配一下长度即可。 时间复杂度O(n)。 T2: 将所有的数排序,统计前缀和,如果到某个点发现下一个数大与前缀和的两倍,则会出现断层。 统计 阅读全文
posted @ 2019-10-24 14:44 hz_Rockstar 阅读(258) 评论(0) 推荐(0) 编辑
摘要:来填坑了...... T1: 将AB看成变量,那么题意转化为是否存在AB,使得Aai+Bbi最小。 解不等式Aai+Bbi<Aaj+Bbj得: $\fr 阅读全文
posted @ 2019-10-24 14:17 hz_Rockstar 阅读(122) 评论(0) 推荐(0) 编辑
摘要:T1: 将区间按左端点排序,点排序。 依次扫每一个点,将所有满足条件的区间装入堆中,弹掉所有过期的区间。 每次贪心取右端点最小的区间。 时间复杂度O(nlogn)。 T2: 把树放在森林中考虑。 设dp[i][j]表示i个点的森林,有j个点在第一棵树的概率。 然后$dp[i][j]= 阅读全文
posted @ 2019-10-15 17:21 hz_Rockstar 阅读(238) 评论(0) 推荐(0) 编辑
摘要:T1: 直接模拟。 每次操作分为移动,不动位置合并,移动三个步骤。 时间复杂度O(n2m)。 T2: 结论:最优子序列一定由一个单调上升序列和一个单调下降序列组成。 证明: 如果同时存在多个单升区间和单降区间。 当两个相同时,只保留一个平均数不变; 其他情况下去掉小的那个一定最优。 所以求一个 阅读全文
posted @ 2019-10-15 17:04 hz_Rockstar 阅读(170) 评论(0) 推荐(0) 编辑
摘要:T1: 发现nm极小。 将左括号看作1,右括号看作-1, 设dp[i][j]为考虑了i为,括号总和为j的方案数,期间要保证j时刻大于0。 枚举左侧的长度和左侧的括号和,可以算出右侧信息。 要处理出s中出现的括号和最小值tot,左侧枚举的括号和不得小于tot,不然会有 阅读全文
posted @ 2019-10-15 16:47 hz_Rockstar 阅读(171) 评论(0) 推荐(0) 编辑
摘要:T1: 直接搜索子集复杂度太高,考虑meet in the mid。 先将两段内部的答案处理出来,暴力枚举子集即可。 将所有数分成两半,在前一半里枚举集合和子集,在后一半里枚举集合,判断前一半的子集是否为并集的一半,再反过来枚举一遍。 时间复杂度O(6n2)。 T2: 先 阅读全文
posted @ 2019-10-15 16:22 hz_Rockstar 阅读(150) 评论(0) 推荐(0) 编辑
摘要:T1: 根据三角形相似可得y=(nx)xn=xx2n。 后面必须是整数,一个一个试即可。 时间复杂度O(n)。 T2: 考虑DP。 设dp[i]为以第i个点结束的最优代价,s[i][j]为区间[i,j]的不同值个数。 发 阅读全文
posted @ 2019-10-14 11:06 hz_Rockstar 阅读(123) 评论(0) 推荐(0) 编辑
摘要:T1: 不难发现间隔为n的倍数的两列,放的棋子数必须相同。 可以用背包DP解决,设dp[i][j]为考虑到第i列,放了j个棋子的方案数。 DP范围不能超过n,但可以用上面的性质。 每一列的摆放都是独立的,所以可以用快速幂求出。 状态转移方程: $dp[i][j]=\sum \li 阅读全文
posted @ 2019-10-14 10:53 hz_Rockstar 阅读(166) 评论(0) 推荐(0) 编辑
摘要:T1: 最优矩形面积为最小长乘最小宽。 将所有矩形按照x降序排序,从上到下扫,同时将y装进堆中,还没有扫到的都视作删除。 每次pop掉一个最小的,表示删除掉这个矩形。 然后用堆中最小值乘当前x更新答案。 时间复杂度O(nlogn)。 T2: 最小点集即为每个点到公共lca的路径的并。 阅读全文
posted @ 2019-10-14 10:19 hz_Rockstar 阅读(115) 评论(0) 推荐(0) 编辑
摘要:T1: 求满足(a+b)<=nn|ab的数对数。 将答案用公式表示: $\begin{array}{rl} ans &=& \sum \limits_{i=1}^n \sum \limits_{j=1}^n [i+j|ij][i+j<=n] \\ &=& \sum \limits_{i=1 阅读全文
posted @ 2019-10-14 09:59 hz_Rockstar 阅读(209) 评论(0) 推荐(0) 编辑
摘要:T1: 每行每列都可以交换,其实就是错位排列。 写出递推式,打个高精就行了。 fn=(fn1+fn2)(n1)。 时间复杂度O(nc)。 T2: 可以暴力用bitsetAC。 直接建图跑拓扑,判断所有点的入度和能到达它的的点数是否相同。 用bitset维护连通集合。 若 阅读全文
posted @ 2019-10-13 06:30 hz_Rockstar 阅读(120) 评论(0) 推荐(0) 编辑
摘要:T1: 枚举m的个数,O(1)算出有几个x符合条件。 这样不仅效率低下,还会算重。 把m一定时的所有结果拍在数轴上发现仅当ym>=lcm(n,m)时会算重。 枚举到lcm即可。 时间复杂度O(n)。 T2: 直接统计复杂度太高,考虑换一个思路。 枚举gcd,将所有边权 阅读全文
posted @ 2019-10-11 17:43 hz_Rockstar 阅读(131) 评论(0) 推荐(0) 编辑
摘要:T1: 线性筛出前1e7个质数,暴力求出函数值。 由于输入可以当作随机数据处理,所以指针的变化是常数级别的,可以用指针维护位置。 开一个桶,维护每个数的数量,开两个指针变量,维护当前位置是哪个数和是第几个。 然后就可以分类讨论了,若删除和插入分别在两侧,指针就要移动。 等于的情况可以当作大于的情况, 阅读全文
posted @ 2019-10-11 17:21 hz_Rockstar 阅读(171) 评论(0) 推荐(1) 编辑
摘要:T1: 先考虑树的情况。 DFS遍历整棵树,将每个儿子向自己连的链两两匹配。 若有落单的点,就把当前节点的父链连进去,反之将父链传上去。 对于图的情况,我们可以将一个点拆成许多点,保持边不变,再对新建的树进行上述过程。 时间复杂度O(m)。 T2: 考虑转化题意。 设原序列为a,对原序列开一 阅读全文
posted @ 2019-10-10 21:47 hz_Rockstar 阅读(11275) 评论(1) 推荐(0) 编辑
摘要:手写STL,卡常专用。 node为变量类型,可以自由定义,以下不再赘述。 1、stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可。 2、queue(循环队列) 用两个指针,记录队头和队尾,达到两端时特判即可。 3、deque(双端队列) 和队列类似。 4、priority_q 阅读全文
posted @ 2019-10-09 19:45 hz_Rockstar 阅读(922) 评论(2) 推荐(9) 编辑
摘要:T1: 直接模拟。 记录当前位置及朝向,暴力累加即可。 但是每次memset可能会T,只能记录经过的点,然后一个一个清。 时间复杂度O(nk)。 T2: rvalue学长的题解很好。 链接一下Lockey大神的题解:这里。 T3: 将操作视为一个字符串,可以用hash做,然后就是简单的线段树区间 阅读全文
posted @ 2019-10-08 18:18 hz_Rockstar 阅读(8052) 评论(0) 推荐(0) 编辑
摘要:T1: 根据贪心策略,在价格较小的时候买入,价格较大的时候卖出,获得的价值才会更大。 每天都可以和之前的一天组成匹配,贡献为差值。 先用一个小根堆,维护还没有匹配的权值,从前向后扫,若堆顶比当前权值小,则组成匹配,累加差值,并将当前权值插入。 我们发现,在同一天买入和卖出,等价于这天没有操作。 也就 阅读全文
posted @ 2019-10-08 16:29 hz_Rockstar 阅读(398) 评论(1) 推荐(0) 编辑
摘要:T1: 约瑟夫问题。 经证(da)明(biao)可知,最终答案计算方法是: 答案由1开始,每次加m,若大于次数加一,就对次数加一取模。 可以O(1)计算每次取模的位置,取模不超过mlogn次,于是时间复杂度为O(mlogn)。 T2: 普及:向量叉积:$v_1=(x_1,y_1) 阅读全文
posted @ 2019-10-05 16:44 hz_Rockstar 阅读(154) 评论(0) 推荐(0) 编辑
摘要:T1: 翻转区间相当于位移,但是边界附近的点要特判。 可以处理出最左侧和最右侧的对称轴,然后分类讨论每个数的位置,即可知道他能移动到的区间。 用set进行bfs即可,相同的点不会被遍历两次。 也可以线段树优化建边,注意优化建边跑双端队列bfs一定要把出边的权值设为1。 时间复杂度O(nlogn) 阅读全文
posted @ 2019-10-05 15:45 hz_Rockstar 阅读(140) 评论(0) 推荐(0) 编辑
摘要:T1: 每个数至多有2m个约数,也就是说即使n很大,在数集中有倍数的数在ma级别。 可以暴力筛出数集中每个数得约数,用hash表维护一下,可实现O(1)查询。 用n减去筛出的数个数即为答案中0的个数,但是注意超过n的数要删掉。 时间复杂度$O( 阅读全文
posted @ 2019-10-05 15:23 hz_Rockstar 阅读(150) 评论(0) 推荐(1) 编辑
摘要:T1: 贴心送分题。 对于每种颜色,如果多了,就会有多的数量除二的贡献,反之会有少的数量的需求。 最后判断贡献和需求哪个大即可。 时间复杂度O(1)。 T2: 边数太多,考虑将状态记录在点上。 每一种可行方案是一个dag,可以按照拓扑序列分层。 状态记录当前选中的集合,和最后一层的点的集合,然后 阅读全文
posted @ 2019-10-04 15:42 hz_Rockstar 阅读(169) 评论(0) 推荐(0) 编辑
摘要:T1: 对于同一种选取方案,在时间上是单调的。 如果单调下降,那么该方案的最优点在0,反之可以二分位置。 现在我们需要求得在某个时间上的前m小值,用nth_element即可。 时间复杂度O(nlogmax。 T2: 每条路径的意义就是两端的点权之和。 我们可以折叠所有点到根节点的 阅读全文
posted @ 2019-10-03 14:07 hz_Rockstar 阅读(213) 评论(0) 推荐(0) 编辑
摘要:T1: 区间很大,但是最优位置可能出现的地方不超过2n个。 可以将区间端点及最优值可能出现的位置离散化,即每个区间的lrr+1,连同1一起离散化。 然后线段树维护就即可。 要同时维护最左侧的01,当前区间是否全为1或全为0。 修改时如果是区间赋值,直接覆盖答 阅读全文
posted @ 2019-10-03 12:14 hz_Rockstar 阅读(166) 评论(1) 推荐(0) 编辑
摘要:T1: 所有不互质的数对一定在同一集合内。 并查集维护每个数所在集合,以数对为链合并。 但是这样复杂度为O(n^2)的。 考虑优化,两个数不互质,意味着他们之间有相同质因子,把每个数分解质因数,和他的质因子合并即可。 线筛处理出最小质因子后可以O(logn)求所有质因子。 时间复杂度$O(n 阅读全文
posted @ 2019-10-03 11:52 hz_Rockstar 阅读(155) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示