09 2018 档案

摘要:Richard神犇出给nowcoder的题 用单调栈找到每个点它向右和向左的第一个大于或小于它的位置,然后它作为最大值/最小值的区间就要在这个范围里,那么它的贡献就是这个区间长度乘一乘再减一减 注意一下值相等的时候怎么处理 阅读全文
posted @ 2018-09-27 08:19 Ressed 阅读(282) 评论(0) 推荐(0)
摘要:反着建边,从T bfs找合法的点,然后再正着bfs一下求最短路就行了 阅读全文
posted @ 2018-09-27 07:56 Ressed 阅读(194) 评论(0) 推荐(0)
摘要:先考虑部分分(只有01/只有0~7)做法:枚举每个数,把和他相同的设为1,不同的设为-1,然后这个数作为众数贡献的个数就是区间和>0的个数 推着做,树状数组记前缀和<=x的区间的数量就可以,复杂度$O(8nlogn)$ 如果直接套过来,$O(n^2logn)$肯定是不行的,但可以发现枚举了所有数以后 阅读全文
posted @ 2018-09-27 07:53 Ressed 阅读(369) 评论(0) 推荐(0)
摘要:貌似不用做前缀和也能过? 阅读全文
posted @ 2018-09-25 21:54 Ressed 阅读(191) 评论(0) 推荐(0)
摘要:有两种情况:一个点到它的父亲的父亲(要算两次)、一个点的子节点之间互相到达 阅读全文
posted @ 2018-09-25 21:52 Ressed 阅读(156) 评论(0) 推荐(0)
摘要:1 #include 2 #define pa pair 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=220; 7 8 inline ll rd(){ 9 ll x=0;char c=getchar();... 阅读全文
posted @ 2018-09-25 21:50 Ressed 阅读(210) 评论(0) 推荐(0)
摘要:设f[i][j]为到达(i,j)这个位置的最小操作数 就有$f[i][j]=min\{f[i-1][j+Y[i-1]],f[i-1][j-X[i-1]*k]+k\}$ 然后考虑优化一下转移: 对于一系列模x[i-1]相同的高度,它们都可以转移到模x[i-1]相同的高度、而且在它们上边的点,所以只要从 阅读全文
posted @ 2018-09-25 21:49 Ressed 阅读(164) 评论(0) 推荐(0)
摘要:先二分出一个x,我们要算使最近的跳跃距离>=x的最少移除数量是否<=M就可以了 然后就别dp了...贪心就完事了...我肯定能不移就不移比较好... 阅读全文
posted @ 2018-09-25 21:42 Ressed 阅读(211) 评论(0) 推荐(0)
摘要:设f[i][j][k][b]表示在A串第i位、这是第j组、B串第k位、i号选不选(b=0/1) 那么就有$f[i][j][k][1]=(A[i]==B[k])*(f[i-1][j-1][k][0]+f[i-1][j][k-1][1]+f[i-1][j-1][k-1][1])$,$f[i][j][k] 阅读全文
posted @ 2018-09-25 21:40 Ressed 阅读(135) 评论(0) 推荐(0)
摘要:首先求出fail数组,如果没有不重叠的限制的话,我们可以在求fail的时候递推出个数cnt[i]=cnt[fail[i]]+1(这个cnt是算上自己本身==自己本身的) 然后如果是要求不重叠的话,就是相当于一直跳fail,直到找到了一个长度不超过一半的fail,然后num[i]就是它 但如果直接暴力 阅读全文
posted @ 2018-09-25 21:36 Ressed 阅读(198) 评论(0) 推荐(0)
摘要:我们先不会就二分一下答案,设它是x,我们要判断它能不能满足 为了满足这个答案,我们就要让原本路径长度大于x的所有路径都经过某条边,而且这条边还要大于等于最长的路径-x 于是运用树上差分的思想,对于所有长度>x的路径,给他的两端点处++,lca处--,这样统计树上每个点的子树的和,就是这个点与它父节点 阅读全文
posted @ 2018-09-25 21:29 Ressed 阅读(183) 评论(0) 推荐(0)
摘要:秦九韶算法:多项式$a_0+a_1x+a_2x^2+...+a_nx^n=a_0+x(a_1+x(a_2+...+(xa_n))..)$,这样对于一个x,可以在O(n)求出结果 为了避免高精度,我们同时模几个质数来判断每个的值是不是等于0,这样出锅的概率就非常小 然而这样做复杂度是O(nm),过不去 阅读全文
posted @ 2018-09-25 21:23 Ressed 阅读(196) 评论(0) 推荐(0)
摘要:我们都做过一道题(?)货币兑换,是用cdq分治来解决不单调的斜率优化 现在它放到了树上.. 总之先写下来dp方程,$f[i]=min\{f[j]+(dis[i]-dis[j])*p[i]+q[i]\} ,j是i的祖先,dis[i]-dis[j]<=l[i]$ ,其中dis[i]表示1号点到i号点的距 阅读全文
posted @ 2018-09-24 18:32 Ressed 阅读(220) 评论(0) 推荐(0)
摘要:可以把翻倍的操作看作是一个查询和修改(增加刚查询得来的值)的符合操作,然后做cdq就行了 阅读全文
posted @ 2018-09-24 18:18 Ressed 阅读(289) 评论(0) 推荐(0)
摘要:经过部分分的提示,我们可以把一条路径切成s到lca 和lca到t的链 这样就分为向上的链和向下的链,我们分开考虑: 向上:如果某一个链i可以对点x产生贡献,那么有deep[x]+w[x]=deep[S[i]],而且S[i]和lca[i]都在x的子树中 向下:如果某一个链i可以对点x产生贡献,那么有d 阅读全文
posted @ 2018-09-24 18:04 Ressed 阅读(247) 评论(0) 推荐(0)
摘要:首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解,直接两种状态选或不选分开算O(1)转移多好(所以年轻人不要整天满脑子都是钦定钦定的) 但为什么Li 阅读全文
posted @ 2018-09-24 17:47 Ressed 阅读(211) 评论(0) 推荐(0)
摘要:由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下自己和自己确定的抛物线只经过自己) 然后设状态s表示目前已经有哪些点被击中了,然后我们钦定这次就要打那个最 阅读全文
posted @ 2018-09-24 17:37 Ressed 阅读(250) 评论(0) 推荐(0)
摘要:可以直观地想到用优先队列来做,但数据范围是O(n)的 然后我们发现,因为我们每次挑出来的蚯蚓是单调的,所以把每个切成两段后,那两段也是对应单调的 也就是说,算上最一开始的蚯蚓,我们一共维护三个队列,三个分别单调,每次取出来最大的那个队头就行了 阅读全文
posted @ 2018-09-24 17:31 Ressed 阅读(159) 评论(0) 推荐(0)
摘要:离散化一下然后把姓名串和询问串都放一起做SA 和bzoj3277串类似地,满足某一询问的后缀(就是和这个询问对应的后缀的LCP>=这个询问长度的后缀)的排名也是一个区间,把这个区间二分出来即可 现在要做的两个问题就变成了: 给定一些区间、一些点,每个点有对应的颜色(就是sa[i]对应的那个姓名串对应 阅读全文
posted @ 2018-09-20 16:54 Ressed 阅读(194) 评论(0) 推荐(0)
摘要:无修改、询问区间种类数的问题可以很容易地用树状数组解决 我们先给询问按右端点排序,然后推着做,每次让a[i]++,表示i处新增了一个种类 但是这样会和前面的有重复,我们只要记下每个种类上次在哪里出现过,当这次又出现了,把前面的那次减掉就可以了 每次处理完之后,就可以计算所有右端点为i的区间的答案,就 阅读全文
posted @ 2018-09-20 16:47 Ressed 阅读(110) 评论(0) 推荐(0)
摘要:按照边权排序建出kruskal重构树,每次就变成了先找一个权值<=x的最远的祖先,然后看这个子树的第k小。离散化一下,在dfs序上做主席树即可 而且只需要建叶节点的主席树 注意输出的是第k小点的高度值 阅读全文
posted @ 2018-09-20 16:25 Ressed 阅读(185) 评论(0) 推荐(0)
摘要:dp..dp的时候不能设f[N][x1][x2][x3][x4],会T,要把N省略,然后通过1/2/3/4牌的数量来算已经走到哪一个了 阅读全文
posted @ 2018-09-19 22:11 Ressed 阅读(140) 评论(0) 推荐(0)
摘要:我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先假设中间有一个格x隔开了两个能到的区间,那x一定比那两个区间的端点高,但它又是可达的,那一定有一条路 阅读全文
posted @ 2018-09-19 22:09 Ressed 阅读(230) 评论(0) 推荐(0)
摘要:显然可以先把被覆盖掉的区间去掉,然后排个序,左、右端点就都是单调的 设f[i][j]表示前i个区间中删掉j个,而且钦定i不能删的最大覆盖长度 (如果不钦定,就要有一个删掉的状态,那我无法确定前面的到底到哪是没删的) 那么有$f[i][j]=max\{f[k][j-(i-k-1)]+R[i]-max( 阅读全文
posted @ 2018-09-19 21:58 Ressed 阅读(470) 评论(0) 推荐(0)
摘要:常见操作:先把所有串都连到一起,但中间加上一个特殊的符号(不能在原串中/出现过)作为分割 由于全部的子串就等于所有后缀的所有前缀,那我们对于每一个后缀,去求一个最长的前缀,来满足这个前缀在至少K个原串中出现过 那我们就二分一下这个前缀的长度。现在的问题就是怎么判断这个前缀是否在K个串中出现过了。 显 阅读全文
posted @ 2018-09-19 21:43 Ressed 阅读(491) 评论(0) 推荐(0)
摘要:原理 定义rank[i]表示suffix[i]在所有后缀中的字典序排名;sa[i]表示字典序排名为i的后缀是suffix[sa[i]] 定义height[i]表示排名为i的后缀和排名为i-1的后缀的LCP(最长公共前缀) 可以证明,$height[rank[i]]>=height[rank[i-1] 阅读全文
posted @ 2018-09-19 21:22 Ressed 阅读(141) 评论(0) 推荐(0)
摘要:我们先设f[i][j]表示长度为i,以j结尾的不降子序列个数,$f[i][j]=\sum{f[i-1][k]},A[k]<=A[j],k<j$,用树状数组优化一下可以$O(n^2logn)$求出来 然后我们让g[i]是长度为i的不降子序列的个数,答案就是$\sum{g[i]*(N-i)!-g[i+1 阅读全文
posted @ 2018-09-18 09:00 Ressed 阅读(175) 评论(0) 推荐(0)
摘要:可以发现,只要存在连续k个相同的,这个情况就一定是合法情况 然而这个不太好算,我们算不存在k个相同的,然后用$m^n$把它减掉 设f[i]为前i个,没有连续k个的 显然$f[i]=m^i ,i<K$ 然后我们现在想把f[i]转移过来,只要取f[i-k+1]..f[i-1]的所有情况,然后在每个的后面 阅读全文
posted @ 2018-09-17 14:15 Ressed 阅读(233) 评论(0) 推荐(0)
摘要:我们要出租的话,一定是出租产奶量最少的牛 那我们就看出租多少头牛(其他的卖奶)的时候答案最大就可以了。 (注意N有可能小于R) 阅读全文
posted @ 2018-09-17 14:06 Ressed 阅读(311) 评论(0) 推荐(0)
摘要:类似于NOI2018d1t1的离线做法,把询问存下来,排个序,然后倒着给并查集加边,每次询问并查集联通块大小 阅读全文
posted @ 2018-09-17 14:04 Ressed 阅读(138) 评论(0) 推荐(0)
摘要:签到一脸 $a_n=10a_{n-1}+1$求出通项$a_n=\frac{10^n-1}{9}$,然后可以化成$10^n=9K+1 (mod m)$,求一个最小的n 然后我们知道这个n一定是<=m的 然后我们设n=i*t-j,其中$t=ceil(\sqrt{m})$,0<=i,j<t,移项,变成$1 阅读全文
posted @ 2018-09-17 13:26 Ressed 阅读(127) 评论(0) 推荐(0)
摘要:用途 大规模地处理树上路径 做法 先考虑对x为根的子树做dfs来处理x子树到x的路径,然后统计答案,然后再递归地做x的儿子... 然而当树退化成链时,最差复杂度是$O(n^2)$的 类比一维中二分的做法,其实是使左右区间尽量平均,那我们也让我们要处理的点的子树大小尽量平均 具体来说,我们每次想要做x 阅读全文
posted @ 2018-09-14 21:47 Ressed 阅读(149) 评论(0) 推荐(0)
摘要:要求出两点间距离==0(mod3) 的数量,然后除以(n*n) 设f[i][j]为i的子树到i的距离==j(mod3)的数量,然后做树形dp即可 因为要最简,所以要求一下gcd,然后除下去 阅读全文
posted @ 2018-09-14 21:20 Ressed 阅读(172) 评论(0) 推荐(0)
摘要:我们是想跑最短路的 我们有两种建图方式: 1.对于每个doge i,连向B[j]==B[i]+P[i]*k ,k=..,-2,-1,0,1,2,... ,边权=|k|,这样连的复杂度是$O(N\sum\limits_{i=1}^{m}\frac{1}{P[i]})$ 2.对于每个楼i,建max(P[ 阅读全文
posted @ 2018-09-14 21:11 Ressed 阅读(269) 评论(0) 推荐(0)
摘要:N个点,每个点发出一条边,那么这个图的形状一定是一个基环树森林(如果有重边就会出现森林) 那我做f[0][x]和f[1][x]分别表示对于x子树,x这个点选还是不选所带来的最大价值 然后就变成了这好几个环上不能选相邻的点,最大的价值和 我们把这个环从N到1处断开,然后钦定一下1选还是不选,统计一下答 阅读全文
posted @ 2018-09-14 20:44 Ressed 阅读(152) 评论(0) 推荐(0)
摘要:给牛和草都按价格排序,然后贪心地把草给牛(就是尽量给满足价格的、要求的美味度最高但不超过这个草的美味度的牛) 这个可以用一个平衡树来维护,偷懒直接用multiset了 阅读全文
posted @ 2018-09-14 20:38 Ressed 阅读(173) 评论(0) 推荐(0)
摘要:点分治。WA了一万年。 重点就是统计答案的方法 做法一(洛谷AC bzojWA 自测WA): 做点x时记到x距离为k的边数最小值为dis[k],然后对每一对有值的dis[i]和dis[K-i],给ans[A[i]+A[K-i]]++,然后因为统计到了一部分不合法答案,就做x的儿子,给ans变成--, 阅读全文
posted @ 2018-09-14 20:33 Ressed 阅读(267) 评论(0) 推荐(0)
摘要:发现对于某一个点它向上发的一条边,它被经过的次数就是这个点子树数量*不是它子树的数量 那就维护一个前缀和,然后每次拿两个端点和它们的lca的值加一加减一减,再乘上加上的值,就是这次修改后答案的增量 (最后答案还要除以(N*N)) 倍增会被卡空间,难受 阅读全文
posted @ 2018-09-13 23:16 Ressed 阅读(291) 评论(0) 推荐(0)
摘要:由于是一个二次函数的关系,所以易证应该尽量让两组的顺序相同 然后就离散化乱搞几发,最后就变成了求逆序对的数量了 阅读全文
posted @ 2018-09-13 23:09 Ressed 阅读(155) 评论(0) 推荐(0)
摘要:用一个差分树状数组维护一下每个深度的和,然后每次拿着路径端点和lca加一加减一减就行了 阅读全文
posted @ 2018-09-13 23:06 Ressed 阅读(197) 评论(0) 推荐(0)
摘要:https://www.vijos.org/d/SUOI/p/59dc5af7d3d8a1361ae62b97 二分一个答案,然后做一做前缀和,用满足区间大小的最小值减一减,判断答案合不合法 然而还要输出一个最小的区间 太毒瘤了 但其实最后答案中最小区间的端点就只能是刚才做的那个最小值,因为如果不是 阅读全文
posted @ 2018-09-13 23:02 Ressed 阅读(242) 评论(0) 推荐(0)
摘要:设f1[i]表示以1..i中某个合法序列的长度,而且最后一位是较大的 f2[i]表示以1..i中某个合法序列的长度,而且最后一位是较小的 那么就有$f1[i]=max\{f2[j]+1\},(j<i,h[j]<h[i])$,f2同理 本来想直接建线段树来维护这个最大值的,但是似乎不需要: 对于f1, 阅读全文
posted @ 2018-09-13 22:55 Ressed 阅读(167) 评论(0) 推荐(0)
摘要:把一个点拆成三个,分别对应它的同类、它的猎物和它的天敌,这样的话(以下的相等都是并查集意义上的): 如果令a,b同类,那么a的猎物不能是b的同类,a的天敌不能是b的同类 如果令a吃b,那么a的同类不能是b的同类、a的天敌不能是b的同类。 要令a,b同类,就使(a和b)的同类、猎物、天敌分别相等 要令 阅读全文
posted @ 2018-09-13 22:47 Ressed 阅读(185) 评论(0) 推荐(0)
摘要:我们一位一位地来做,每次判断这一位能否放0,而且要在满足前几位的情况下。用dp来判断 具体来说,设f[i][j]表示前i个划分成j个区间能否满足,那么我们会有转移trans[i][k+1],当区间[i,k]的和在某些位上不是1时trans[i][k+1]=1 这些位,就是正在做的这位和它之前确定下来 阅读全文
posted @ 2018-09-13 22:41 Ressed 阅读(170) 评论(0) 推荐(0)
摘要:我想动某个点的话,一定要先把空白点移动到这个点旁边,然后调换这个点和空白点,一直重复 那么,我们就可以记一些状态(x,y,s) (s={0,1},{0,-1},{1,0},{-1,0}),表示我要动的点在(x,y),然后空白点在(x+s.x,y+s.y) 这样的话我们就可以建图:$(x,y,s)-1 阅读全文
posted @ 2018-09-12 20:22 Ressed 阅读(237) 评论(0) 推荐(0)
摘要:给周围的点编号1到n 我们设f[i]为(1到i和中间点)连成一个联通块的情况数,那么有$f[i]=\sum{f[i-j]*j}$,就是从i-j+1到i里选一个连到中心,然后再把i-j+1到i连成链 但这样的话,1和n不能连,那就再考虑,如果我们通过1-n这条边链起了i个点,那就再从这i个里连1个到中 阅读全文
posted @ 2018-09-12 13:42 Ressed 阅读(228) 评论(0) 推荐(0)
摘要:先求出某一段时间[i,j]一直用同一个路径的最短路,乘上天数,记作cost[i,j] 那就可以设f[i]是前i天的最小代价,f[i]=f[j]+cost[j+1,i]+K 阅读全文
posted @ 2018-09-12 12:53 Ressed 阅读(135) 评论(0) 推荐(0)
摘要:先按斜率从小到大排序,然后如果排在后面的点B和前面的点A的交点是P,那B会把A在P的右半段覆盖掉,A会把B在P的左半段覆盖掉。 然后如果我们现在又进来了一条线,它跟上一条的交点还在上一条和上上条的左边,这就说明上一条完全被覆盖了 这样的话,维护一个单调栈做一做就可以了 (要先处理一下,斜率相同的只留 阅读全文
posted @ 2018-09-12 12:50 Ressed 阅读(156) 评论(0) 推荐(0)
摘要:(坑) 漫谈OI中的群论入门 阅读全文
posted @ 2018-09-12 09:51 Ressed 阅读(134) 评论(0) 推荐(0)
摘要:设f[i][j]为让前i天发生j次暴动需要改变的最少的值 则f[i][j]=min{f[k][j-1]+(x[k+1]!=0)+(x[k+2]!=1)+...+(x[i]!=(i-k-1))} $O(n^3)$直接做就好了 阅读全文
posted @ 2018-09-11 16:46 Ressed 阅读(198) 评论(0) 推荐(0)
摘要:https://www.nowcoder.com/acm/contest/172/C (sbw大佬太强啦 orz) 先把每一个路径(x,y)分成(x,lca),(y,lca)两个路径,然后就能发现,对于某两个(直上直下的)路径a,b,b的下端点在a的下端点子树中,且b的上端点深度<=a的上端点深度, 阅读全文
posted @ 2018-09-11 16:37 Ressed 阅读(224) 评论(0) 推荐(0)
摘要:二分一下答案,假设是x。 我们把大于x的看成1,小于x的看成-1,等于x的看成0 那某个区间的和如果是正的,就说明这个区间中位数大于x;如果是0,就等于x;如果是负的,就小于x; 这样的话,做一个前缀和,然后维护一下满足长度>=len的最小值,然后减一减,看看是不是>=0就可以了。 (我自己写的话我 阅读全文
posted @ 2018-09-10 22:17 Ressed 阅读(291) 评论(0) 推荐(0)
摘要:首先二分一个答案x,然后我们把>=x的数看成1,<x的数看成0,那如果最后剩下1,这个答案就是合法的。 那我们就来算让某一位得1至少需要填几个1(设这个值是f[i]) i=1..n时,显然,如果i已经固定,f[i]=0或inf(取决于原来是1还是0);如果i还没有固定,那f[i]=1 然后每次就可以 阅读全文
posted @ 2018-09-10 22:12 Ressed 阅读(703) 评论(6) 推荐(6)
摘要:对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用。 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走的格子就越来越少,也就是相当于在增加1的个数),现在只要能维护把0变成1后,连续的1个数的最大值就行了 用 阅读全文
posted @ 2018-09-08 20:59 Ressed 阅读(227) 评论(0) 推荐(0)
摘要:题意:给一个树状的文件结构,让你求从某个文件夹出发访问到所有文件,访问路径字符串长度之和的最小值,其中,访问父节点用..表示,两级之间用/分割 做两次dfs,第一次算DownN[x]和DownS[x],分别代表从x/访问到它子树中的文件个数和长度之和 第二次算UpN[x]和UpS[x],分别代表从x 阅读全文
posted @ 2018-09-08 20:49 Ressed 阅读(297) 评论(0) 推荐(0)
摘要:平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权。 然后从刚才加的s->t分割出来的两面对应的两个点跑最短路,求出来的就是s到t的最小割。 要特判n==0||m==0的情况 然后我特判的那个点就T了一万次,在抄eli 阅读全文
posted @ 2018-09-07 13:18 Ressed 阅读(207) 评论(0) 推荐(0)
摘要:新建一个N+1的点,飞出去的连到这个上,记size,每次统计x和N+1的链长就可以。 别忘了编号是从0开始的 阅读全文
posted @ 2018-09-07 11:00 Ressed 阅读(216) 评论(0) 推荐(0)
摘要:(坑) 网络流模型整理-http://www.cnblogs.com/LadyLex/p/7601119.html 阅读全文
posted @ 2018-09-07 08:56 Ressed 阅读(118) 评论(0) 推荐(0)
摘要:做法以后再补,先写一些注意事项。 做法以后也不补了,直接看这个吧。https://www.cnblogs.com/candy99/p/6271344.html 1.rotate其实是最容易写错的地方(对于丝毫没有掌握splay蒟蒻我来说),一定要仔细检查 2.splay之前需要先从根开始往下push 阅读全文
posted @ 2018-09-06 22:37 Ressed 阅读(213) 评论(0) 推荐(0)
摘要:求次短路,dijkstra时同时记下到某点的最短距离和次短距离即可。 阅读全文
posted @ 2018-09-06 16:55 Ressed 阅读(177) 评论(0) 推荐(0)
摘要:题解劝退系列 设长的那个串是A,短的那个串是B。 那我们在如果已经知道某个A的时候,A[1..i]和B[1..j]的最长公共子序列$f[i][j]=max\{f[i-1][j],f[i][j-1],f[i-1][j-1]+(A[i]==B[i])\}$ 于是可以递推来枚举A,顺手把NOI的情况判掉。 阅读全文
posted @ 2018-09-06 16:47 Ressed 阅读(153) 评论(0) 推荐(0)
摘要:并查集。 判相切或相交的时候可以两边同时平方,就不需要double和开根号了。 阅读全文
posted @ 2018-09-04 21:09 Ressed 阅读(199) 评论(0) 推荐(0)
摘要:时隔多年终于把这道题锅过了 数据范围显然用搜索剪枝状压dp。 可以记还有哪些点没到(或者已到了哪些点)、我们最深已到的是哪些点、这些点的深度是多少,然后一层一层地往下推。 但其实是没必要记最深的那一层的,只要强行装作每次更新都是用最深的深度更新就可以。这样的话,虽然会有很多情况偏大,但是能正确更新的 阅读全文
posted @ 2018-09-04 20:46 Ressed 阅读(145) 评论(0) 推荐(0)
摘要:背景 有A[i]和B[i],求一个最优的选择,使$\frac{\sum{A[i]}}{\sum{B[i]}}$最大(最小同理)。 做法 设某一个可能的答案为r,那么经过变形,会有$\sum{A[i]-B[i]*r}$,当r是最优解时=0,r偏小时>0,r偏大时<0。 然后就可以二分这个r来做了。 例 阅读全文
posted @ 2018-09-03 22:59 Ressed 阅读(194) 评论(0) 推荐(0)
摘要:裸题。 阅读全文
posted @ 2018-09-03 22:55 Ressed 阅读(191) 评论(0) 推荐(0)
摘要:就是01分数规划的思路,只不过当把w[i]-r*t[i]>0的选完以后如果w值还没达到要求,那就再01背包dp一下就好了(dp时w值>W的时候就存在W里就不会爆内存了)。 (跑得很慢..大概是二分的姿势有问题...) (貌似还有直接dp的做法?不会) 阅读全文
posted @ 2018-09-03 22:16 Ressed 阅读(220) 评论(0) 推荐(0)
摘要:二分答案建图,然后判环,就可以了。 字典序输出的话,只要做拓扑序的时候用优先队列来维护就可以了。 (其实判环也可以用拓扑序...) 阅读全文
posted @ 2018-09-03 21:38 Ressed 阅读(177) 评论(0) 推荐(0)
摘要:设f[i]是第i天能获得的最大钱数,那么 f[i]=max{在第j天用f[j]的钱买,然后在第i天卖得到的钱,f[i-1]} 然后解一解方程什么的,设$x[j]=\frac{F[j]}{A[j]*Rate[j]+B[j]}$,$y[j]=Rate[j]*x[j]$的话,就能得到$f[i]=max\{ 阅读全文
posted @ 2018-09-02 19:11 Ressed 阅读(185) 评论(0) 推荐(0)