摘要: 考虑暴力dp。 设$dp_i$表示前$i$个积木,保留积木$i$的最大答案。 那么有 $dp_i=max(dp_j)+1(i j,a_i a_j,a_i a_j\le i j)$ 对$j$的限制条件里前2条显然,后一条是因为要使积木$i$和$j$之间有足够的积木使它们的相对位置正确。 由第三条可得$ 阅读全文
posted @ 2019-03-17 18:45 xryjr233 阅读(196) 评论(0) 推荐(0)
摘要: 两个 错误调了一整天... 1.pubp函数括号匹配错了 2.精度常数类型开成了int 就是一个大模拟,别的没什么好讲的,讲一讲我判断圆和线是否有交点的pubp函数,个人认为很容易理解。 ~~其实就是不想动脑子才用了简单粗暴的办法~~ 我们这样记录一条线段: 当该线段不与$x$轴垂直,我们记录${k 阅读全文
posted @ 2019-03-17 18:30 xryjr233 阅读(285) 评论(1) 推荐(0)
摘要: 显然这是一棵树。 设节点$i$和$j$之间的边为$(i,j)$,边$(i,j)$导电的概率为$q_{i,j}$,第$i$个点自身有电的概率为$p_i$ 考虑树形dp。 显然答案等于所有节点有电的概率之和。 考虑一个节点什么时候会被充电: 1.它自己有电; 2.它的孩子里有节点有电,并且这个孩子和这个 阅读全文
posted @ 2019-03-17 18:28 xryjr233 阅读(159) 评论(0) 推荐(0)
摘要: 简化题意: 一棵$n$个点的树,每一个点有个初始点权,第$i$个点点权为$A_i$,要求任意节点的子节点权值相等,父节点权值等于子节点的和,问最少需要改变多少点的权值。 设节点$i$的子节点数量为$sz_i$,点$i$修改以后的点权为$w_i$。 发现我们通过一个点$i$的权值可以得到所有相邻点的权 阅读全文
posted @ 2019-03-17 18:27 xryjr233 阅读(129) 评论(0) 推荐(0)
摘要: 设第一个串为$a$,第二个串为$b$。 不妨让我们的所有操作对$b$进行。 如果我们将$b$逆时针转动$j(0\le jn$,$a_i=0$,那原式等价于 $\sum_{i=1}^{n+j}a_ib_{n+j i+1}$ 就很明显了。 所以我们设当$j=x$,原式值为$v_{n+j}$,那么我们可以 阅读全文
posted @ 2019-03-17 18:26 xryjr233 阅读(116) 评论(0) 推荐(0)
摘要: 又是一篇咕咕咕了好久的文章。 什么是多项式 一个形如$a_0+a_1x_1+a_2x_2+...+a_nx^n$的东西叫做关于$x$的$n$次多项式。 其中$a_i$叫做这个多项式的$i$次项系数。特别地,$a_0$是这个多项式的常数项。 多项式乘法 一个$n$次多项式和一个$m$次多项式的乘积是一 阅读全文
posted @ 2019-03-17 18:26 xryjr233 阅读(400) 评论(0) 推荐(0)
摘要: 首选,对于$N$为偶数,我们可以不停地把它除以2,于是我们只用考虑$N$为奇数的情况。 我们有$A_{2i+1}=A_i+A_{i+1}$ 于是我们设$B_i=A_i+A_{i+1}$ 当$i$为奇数 $B_i=A_i+A_{i+1}=A_{\frac{i}{2}}+A_{\frac{i}{2}+1 阅读全文
posted @ 2019-03-17 18:23 xryjr233 阅读(131) 评论(0) 推荐(0)
摘要: 如果我们确定了$r$和$c$,事实上也确定了打地鼠的方案。 因为所有$r\times c$的矩形中,只有1个能覆盖当前还有地鼠的位置组成的图形的角落上的那个洞,所以我们只能在那个角落上砸。 比如,我们目前剩下的地鼠分布为 0 0 0 0 0 0 1 2 0 2 1 2 2 2 3 1 那么我们只能以 阅读全文
posted @ 2019-03-17 18:22 xryjr233 阅读(214) 评论(0) 推荐(0)
摘要: 首先,我们记录$mo_{i,j}$表示在点$i$到点$j$的任意一条最短路上,并且和$i$相邻的标号最小的节点,也就是当聪聪在点$i$,可可在点$j$时,聪聪下一步会走的节点。 显然可以对每一个点$i$跑最短路计算$mo_i$。 使用堆优化的Dijkstra的话这部分的总时间复杂度是$O(n^2\l 阅读全文
posted @ 2019-03-17 18:21 xryjr233 阅读(117) 评论(0) 推荐(0)
摘要: 发现答案=$\frac{n\texttt{个点的不同二叉树的叶子数量和}}{n\texttt{个点的不同二叉树数量}}$ $n$个点的不同二叉树数量是卡特兰数的典型应用之一,NOIp2018提高组初赛还考过(单项选择第八题),卡特兰数的第$n$项是有$n$个节点的不同二叉树的数量(而题目里说是$n+ 阅读全文
posted @ 2019-03-17 18:19 xryjr233 阅读(173) 评论(0) 推荐(0)
摘要: 我们枚举计算点两两之间的距离。 然后我们从小到大考虑每一个距离。 如果我们想让部落之间的最短距离最大,就要尽可能让当前的边连接的两个点在同一个部落中。 因此我们记录剩余的部落数量,每次把最短的,连接两个部落的边连接的两个部落合并成一个,直到剩余部落数量为$k$。 然后剩下的边权最小的连接两个部落的边 阅读全文
posted @ 2019-03-17 18:18 xryjr233 阅读(172) 评论(0) 推荐(0)
摘要: 一看~~数据范围~~题意猜测是网络流。 于是开始建模。 我们建立源点$S$和汇点$T$,将$S$向想要睡觉的小朋友连容量为1的边,将不想睡觉的小朋友向$T$,连容量为1的边,朋友之间连流量为1的 双向 边。 那么我们需要使图被分为两个互不连通的集合,一个和$S$连通,表示最终投了睡觉的小朋友;另一个 阅读全文
posted @ 2019-03-17 18:17 xryjr233 阅读(126) 评论(0) 推荐(0)
摘要: 我们把每一个骑士看做一个点,和他厌恶的骑士之间连一条双向边。 那么问题变为求基环树森林上的最大权独立集。 我们先考虑一颗基环树上的情况。 下图是一棵基环树,蓝边为环上的边。 发现每一块连在一起的非环边(红边)构成一棵树,而且明显每一棵树中有且仅有一个环上的点。 那么我们把每棵树中环上的点作为根,设$ 阅读全文
posted @ 2019-03-17 18:16 xryjr233 阅读(178) 评论(0) 推荐(0)
摘要: 看到区间翻转果断Splay。 然后就没了... 设当前光标位置$p$。 MOVE,PREV,NEXT只需要加减$p$就好了。 设$f_x$为Splay中第$x$小的节点的编号。 INSERT可以将Splay中$f_p$splay到根,$f_{p+1}$splay到根的儿子。 把新的节点先建一棵Spl 阅读全文
posted @ 2019-03-17 18:16 xryjr233 阅读(258) 评论(0) 推荐(0)
摘要: 首先你需要一个~~python~~高精度模板。 然后二分答案,快速幂判断就好了。 设被开根数$n$有$b$位。 发现朴素的高精度乘法是$O(b^2)$的,所以我们考虑优化 你可以写压位高精(我最后的做法,压了8位),或者写一个FFT。 提示:最好不要尝试同时压8位+FFT,否则你就会像我一样因为精度 阅读全文
posted @ 2019-03-17 18:15 xryjr233 阅读(218) 评论(1) 推荐(0)
摘要: 首先我们设$dp_{i,j}$表示$i$和的子树中,有$j$个黑色节点的最大边权和。 我们设$i$ 当前已合并 的子树大小为$sz_i$。 现在我们要合并节点$x$和它的子节点$y$。 我们考虑$x$和$y$之间的边对答案的贡献。 这个贡献就是这条边[(一侧的黑点数$\times$另一侧的黑点数)+ 阅读全文
posted @ 2019-03-17 18:14 xryjr233 阅读(144) 评论(0) 推荐(0)
摘要: 我们设最小的系数为$m$。 那么如果$B=im+j$($i,j$为非负整数,$j using namespace std; const long long INF=1e13; struct edge{ int t,v,nxt; }e[6000010]; int n,a[15],mn=1e9,cnt, 阅读全文
posted @ 2019-03-17 18:12 xryjr233 阅读(122) 评论(0) 推荐(0)
摘要: 首先,我们可以从高到低枚举,看这一位是否可以通过一个分割,使得每一块的异或和在这一位上都为0。 这个贪心显然是正确的。 我们设这个序列的前缀异或和为$xs$,前$i$个数(从第一个开始)的前缀异或和二进制的第$j$位(从第0位开始)为$xs_{i,j}$。 设当前位为$i$ 则如果一段区间$[l,r 阅读全文
posted @ 2019-03-17 18:11 xryjr233 阅读(135) 评论(0) 推荐(0)
摘要: 首先看到左右端点的范围为$10^9$,首先离散化。 考虑将所有区间按照 原来的 长度升序排序,每次将开头一个区间加入,看有没有被大于等于$m$个区间覆盖的点,如果有,不停地从末尾删掉区间,直到没有点的覆盖次数大于等于$m$的点。那么我们就得到了以我们新加入的那个区间的原长度为最长区间长度,那么使得有 阅读全文
posted @ 2019-03-17 18:11 xryjr233 阅读(120) 评论(0) 推荐(0)
摘要: 同 "BZOJ2763" 。 注意本题起点终点不是$s,t$而是$1,n$,之前在不同层之间建立的权值为$0$的边权值改为$w/2$即可。 code: cpp include define val(u,id) (n (u)+id) using namespace std; struct node{ 阅读全文
posted @ 2019-03-17 18:10 xryjr233 阅读(144) 评论(0) 推荐(0)
摘要: 建一个分层图,第$i$层的第$j$个节点表示走到$j$号节点,用了$i$个优惠的最短路,我们设为$[i,j]$。 然后对于原图的一条权值为$w$的双向边$(u,v)$,对于任意的$0\le x\le k$,在$[x,u]$和$[x,v]$之间建立权值为$w$的双向边,对于任意的$0\le x def 阅读全文
posted @ 2019-03-17 18:09 xryjr233 阅读(179) 评论(0) 推荐(0)
摘要: 以下除法一律为整除。 求$\sum_{i=0}^kC_n^i\ mod\ p,p=2333$ 设$f(i,j)=\sum_{k=0}^jC_i^k$ $f(n,k)=\sum_{i=0}^kC_n^i$ 当$k\le p,n\le p$,预处理$0\le i\le p,0\le j\le i$的$C 阅读全文
posted @ 2019-03-17 18:08 xryjr233 阅读(139) 评论(0) 推荐(0)
摘要: 我们记$pw3_i$表示前$i$个位置,结尾为$i$的最长全1子串的期望长度的立方。 如果我们钦定$p_{n+1}=0$,那么答案$=\sum_{i=1}^npw3_i\times(1 p_{i+1})$。乘上$(1 p_{i+1})$意思是这一位要在下一位为$0$的时候才有贡献。 设当前位置为$i 阅读全文
posted @ 2019-03-17 18:06 xryjr233 阅读(154) 评论(0) 推荐(0)
摘要: 首先,发现数据范围很小,结合题意认为这是一道~~搜索~~网络流题。 考虑建模。 我们把图中 高度不为0 的石柱看做点,如何连边呢? 首先,两个相互可以到达的石柱之间需要连容量为$inf$的边,因为如果石柱不消失,蜥蜴可以在这两个石柱之间条无数次。 然后建立汇点$t$,每一个与边界距离不超过$d$的点 阅读全文
posted @ 2019-03-17 18:05 xryjr233 阅读(116) 评论(0) 推荐(0)
摘要: 容易想到一个网络流模型,就是将武器作为节点放在左边,机器作为节点放在右边,一个武器可以攻击一个机器,就在这个武器和这个机器之间连容量为$inf$的边,因为武器可以攻击机器任意多的伤害。 那么如何建立其他边呢? 由于最小时间不好求,我们考虑二分答案$Time$(注意这是一个实数),将问题转化为询问可行 阅读全文
posted @ 2019-03-17 18:04 xryjr233 阅读(118) 评论(0) 推荐(0)
摘要: 明显的点分治。 我们记$num_{i,j}$为点$i$及其子树中的节点与$i$之间的路径的和对3取余为$j$的种类数,显然$0\le j define V(x) (x 2?x 3:(x 阅读全文
posted @ 2019-03-17 18:04 xryjr233 阅读(107) 评论(0) 推荐(0)
摘要: 以下设$n\ge m$。 首先,一个点$(x,y)$到$(0,0)$的路径上经过的点的数量( 不包括首尾 )为$gcd(x,y) 1$。 所以它的能量损耗为$2\times gcd(x,y) 1$。 考虑如何统计$\sum_{i=1}^n\sum_{j=1}^m 2\times gcd(i,j) 1 阅读全文
posted @ 2019-03-17 18:03 xryjr233 阅读(119) 评论(0) 推荐(0)
摘要: 首先,我们可以预处理$r$以内的幸运数字。 这样的数字不会很多,设$r$内所有幸运数字有$n$个,分别是$a_1,a_2,a_3,...,a_n$。 然后,我们知道$m$以内的$x$的倍数有$\lfloor\frac{m}{x}\rfloor$个。 那么答案就是$\sum_{i=1}^n\lfloo 阅读全文
posted @ 2019-03-17 18:02 xryjr233 阅读(162) 评论(0) 推荐(0)
摘要: 其实可操作相当于只有$(a,b),(a, b),(b,a),(b, a)$,因为加上$( a, b)$相当于减去$(a,b)$,其他的同理。 那么问题就变成了找到整数$c,d,e,f$,使 $c(a,b)+d(a, b)+e(b,a)+f(b, a)=(x,y)$成立。 化简原方程,得 $(c+d) 阅读全文
posted @ 2019-03-17 18:01 xryjr233 阅读(132) 评论(0) 推荐(0)
摘要: 首先如果$n\le22$那么大家都会了。 因为22以内只有8个质数,所以我们可以状压一个8位二进制数表示一个数的质因子集合。 那么要求就是两人吃的寿司的质因子集合交集为空集。 怎么状压应该都会了吧。 那么$n\le500$呢? 发现$\lfloor\sqrt{500}\rfloor=22$,也就是5 阅读全文
posted @ 2019-03-17 18:00 xryjr233 阅读(213) 评论(0) 推荐(0)
摘要: 首先,我们都会暴力计算贡献。 我们还发现这题对精度的要求很低。 于是我们心想,这一定不是出题人随便放的,而是关乎正解的。 我们发现当$j i$很大时,它的微小改变对答案的影响就是微不足道的。 于是我们定义一个块大小$siz$,然后对于一个长$siz$的区间$[i,i+siz 1]$,且这个区间位于影 阅读全文
posted @ 2019-03-17 18:00 xryjr233 阅读(116) 评论(0) 推荐(0)
摘要: 看到最大值最小,第一个想到二分答案。 那么我们需要改成虫洞的边必然被所有大于当前答案的路径覆盖,我们只要在这些边中找到一条时间最大的,看看删去以后能否使之前耗时最长的路径耗时小于等于答案就好了。 那么如何找到满足条件的边呢? 我们可以将每一条超出答案的路径上所有的边打上一个标记,(标记数量=超出答案 阅读全文
posted @ 2019-03-17 17:59 xryjr233 阅读(141) 评论(0) 推荐(0)
摘要: 发现对于任意一条路径,我们可以找到一些环,然后将环和链之间用链连起来,从而使这条链的异或和xor上环的异或和(注意我们新加的链被走了两次,所以没有贡献)。 所以我们可以找出图中所有的环,然后用某一节点1到节点n的路径异或上若干个环来增大总的异或和。 最大异或和,想到用线型基维护。 那么最开始的路径是 阅读全文
posted @ 2019-03-17 17:57 xryjr233 阅读(109) 评论(0) 推荐(0)
摘要: 考虑贪心地从魔力值大到小加入矿石,合法就加入。 ~~为什么是对的我也不知道233~~ 那么如何判断合法呢? 其实考虑是否可以让它在异或一些数时候变为0即可。 线性基维护。 code: cpp include using namespace std; struct stone{ int m; long 阅读全文
posted @ 2019-03-17 17:57 xryjr233 阅读(140) 评论(0) 推荐(0)
摘要: 一看到IOI2007,又是紫题,一脸惊恐... 然后就被我秒了233 我们令一个数字表示一种食物。 设$dp_{i,a,b,c,d}$表示运完第$i$辆食物,煤矿1的上次食物是$b$,上上次是$a$,煤矿2的上次食物是$d$,上上次是$c$。 设第$x$次的食物是$f_x$,令$i,j,k$中不同食 阅读全文
posted @ 2019-03-17 17:56 xryjr233 阅读(178) 评论(0) 推荐(0)
摘要: 首先很容易想到并查集维护,将相等的数merge起来。但是我们很难维护不等的情况。 那怎么办? 我们发现我们可以查询两数不等是否成立,只是不能维护它而已,并且事实上,不等没有类似$a\ne b,b\ne c,\texttt{则}a\ne c$的性质。 所以我们可以变更维护顺序。 先在并查集里维护等于的 阅读全文
posted @ 2019-03-17 17:54 xryjr233 阅读(139) 评论(0) 推荐(0)