摘要:
考虑一个点被使用的奇偶次 这种题如果是边的话,就是经典套路 现在是点,其实可以把他周围的边都计算一遍就知道这个点用了多少次 同时不要忘了加上以他为顶点的n-1条路 #include<bits/stdc++.h> using namespace std; typedef long long ll; t 阅读全文
摘要:
套路题,首先发现dp可做 但是直接枚举复杂度太高,并且发现我们求的都是区间最值,因此考虑线段树优化 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const 阅读全文
摘要:
40有点大,我们考虑折半查找 这样每个字符串有取和不取两种可能 之后乘法原理即可 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=5e6 阅读全文
摘要:
第一步贪心,按照权值排序,越大的能用肯定最优 因为在当前情况下,假如可以用这个但不用 最后求取的解,你将他对应的那个换掉,一个不会更差。 排完序后我们再考虑本题。 这题巧妙地转化在于,转化成图模型,每个武器的两个端点相当于一条边,如果k=1就是自环 对于一个大小为x的集合,他们中的边要不是x-1,要 阅读全文
摘要:
行列无关,因此对于行列分别求解 这题的题目有个错别字,有打成由了,我做的时候没理解求的啥 ,尴尬了 其他就是状态机dp,表示这个位置向左还是向右 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pa 阅读全文
摘要:
贪心点思路很简单,就是根据邻项微扰原则,进行比较两邻项,移项后就能看出公式 但是在这题显然爆ll,因此要用高精度 抄了一下int128的板子,以前虽然碰到过但是都没有记录下来 #include<bits/stdc++.h> using namespace std; typedef long long 阅读全文
摘要:
一道dp好题,初始的不含加减的根据数据范围,容易猜测出状态的设计,表示f[i][j][k],表示最近的匹配1的前i个,2的前j个,3的前k的答案 现在考虑更新,这里我们发现更新只有1e3,这是一个很奇怪的询问 我当时做到这里没有想到的是,因为你只添加一个串的后缀或减去,加入添加,就相当于多增加了25 阅读全文
摘要:
题目是有向图,并且要求我们最短路上的点和顺序都不能变 看上去无从下手又有迹可循。 我们假设两点之间的最短路是a ,x1,x2,x3,b 那么把他们的权值列出来后发现就是一堆边权。 我们想要的是对于每一条最短路,再修改后他们仍是最短的 这就启发我们,修改后他们之间的这些权值一定是原权值+一个定量。这样 阅读全文
摘要:
朴素的做法是把全部的存起来,之后用正常的表达式计算做 据说这种方法容易mle 新的方法是,我们把这个式子当作两个式子相加,因为他没有括号,所以每次的优先级都是相同的 因此我们根据四种情况分类讨论即可 #include<bits/stdc++.h> using namespace std; typed 阅读全文
摘要:
这种以k为长度的,就想一个窗口一样,很多题都是按modk相等为一组判断的 这题也不例外,我们发现,将数组差分之后,相当于2-n都要是0,第一位是啥无所谓 那么从2开始枚举,因为第一位比较特殊,是啥无所谓,他们是0,如果当前小于0,那么我们在这把他补成0(这是唯一变成0的方法),因此i+k的位置就要对 阅读全文