随笔分类 - 题解
摘要:题面 这道题可以理解为是一个分层图,也可以理解为是二维的SPFA dis[i][j]表示到达i这个点速度为j的最短路 然后跑已经死了的SPFA就好了;
阅读全文
摘要:题面: 一个长度为 n 的序列,对于每个位置 i 的数 ai都有一个优美值,其定义是:找到序列中最长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] 中位数为 ai (我们比较序列中两个位置的数的大小时,以数值为第一关键字,下标为第二关键字比较。这样的话 [l, r] 的长度只有可能
阅读全文
摘要:题面 下面数列的第 n 项: f(0) = a0 ,f(1) = a1 ,f(2) = a2 f(n) = b×f(n − 1) + c×f(n − 2) + d×f(n − 3) + e (n ≥ 3) 输入格式 包含 1 行,共 8 个整数:a0、a 1、a 2、b、c、d、e、n。 输出格式
阅读全文
摘要:题面 这道题由于问最大值最小,所以很容易想到二分,但怎么验证并且如何实现是这道题的难点; 首先我们考虑,对于一个军队,尽可能的往根节点走(但一定不到)是最优的; 判断一个军队最远走到哪可以树上倍增来实现; 但是,这并没有结束,因为可能这颗子树的军队会去另一个军队; 我们先找出所有以根节点的子节点为根
阅读全文
摘要:题意:给定一个序列a,求出这个序列的所有无序数对(一共有n*(n-1)/2个)的差的绝对值的中位数 显然,n^2枚举是会TLE掉的,那么我们换一种思路:二分答案; 对于每个答案,我们可以O(nlogn)验证,比较好想; 然后如果常熟大的话还是会TLE,怎么办呢? 那就是把验证复杂度降为O(n) 其实
阅读全文
摘要:题面 这种数据范围不是乱搞dfs就是乱搞状压DP 首先应该通过任一方式求出a和b的值; 任意一条抛物线只用两头猪就可以确定,所以我们N^2枚举,并把在这两头猪的抛物线上的猪都存进状态state[i][j]; 然后枚举任意两个还没消灭的小猪i,j;f[i|state[j][k]]=min(f[i|st
阅读全文
摘要:题面 首先发现:一个数最多会出现1次; 然后深入推出:一个数不会既用它又用它的相反数; 这样就可以依次考虑每一位了: 如果所有的数都不含有这一位,那么就直接把所有的数除以2 如果含有,那么就减去这一位的数,再除以2; 2 当含有的时候搜索就可以了; 注意需通过去重来优化dfs,否则会TLE掉;
阅读全文
摘要:一棵树,如果有序点对(x,y)之间路径的长度取模于3==0,那么ans0便加上这个长度; 如果取模于3==1,那么ans1便加上这个长度; 如果取模于3==2,那么ans2便加上这个长度; 让你求ans0,ans1,ans2; 输入格式: 第一行包括一个整数n,表示一共有n个点 下面n-1行,每一行
阅读全文
摘要:题面 正解与图书馆馆长的考验一致,都是分层图SPFA;
阅读全文
摘要:题面 目的:求出树的各边长度 条件:每个节点之间最短路、整个图中不存在负边 我们可以每一次把一个点加入树内,求出这个点和已经构建好的树的边的长度; 这个长度抽象理解一下就是(dis[i][j]+dis[i][root]-dis[root][j])/2 为什么?因为上面的式子中这条边刚好遍历了两次;
阅读全文
摘要:题面 对于每个点建立一颗主席树; 然后按照树上差分的思想统计主席树的前缀和; lca+主席树+前向星存表就可以了;
阅读全文
摘要:题面 挺好的一道树剖模板; 首先要学会最模板的树剖; 然后这道题要注意几个细节: 初始化时,seg[0]=1,seg[root]=1,top[root]=root,rev[1]=root; 在线段树上进行操作时,要使用lazy标记; 对于一个以x为根的子树,它子树中所有的元素一定时在线段树上连续的区
阅读全文
摘要:1.USACO08JAN Telephone Lines 题面 由于问的是最大值最小,所以二分加验证就好了 比较显然的,题干问的是第k+1长的路最短; 那么二分答案是正确的方向; 但是怎么验证? 我们可以将所有边权大于二分的答案的边视为边权是1,否则看成0; 然后从1~n跑最短路,如果答案大于二分的
阅读全文
摘要:题面 首先忽略掉题中k的限制(油量的限制); 那么很清楚的发现:对于一个点(i,j);向(i+1,j),(i,j+1)建立一条容1费0的边;向(i-1,j),(i,j-1)建立一条容1费B的边; 很清楚的:从(1,1)到(n,n)跑费用流就好了; 那么加上k的限制呢? 由于k很小,所以我们可以建立分
阅读全文
摘要:题面 这是我做的第一道概率DP题; 做完后发现没有后效性的DP是真的水; 在这里说主要是再捋顺一下思路; 设f[i][j]表示有i只白鼠,j只黑鼠是获胜的概率; 显然:f[i][0]=1; 然后分四种情况: 1.先手刚好拿到白鼠:概率是i/(i+j); 2.先手拿到黑鼠,后手拿到了白鼠:概率为0;
阅读全文
摘要:题面 这道题有着较小的n,所以求最短路时floyd也可以胜任; 设g[i][j][k]表示目前从i到j存在权值为k的路径; 由于边权均为1,所以g[i][j][k]=g[i][p][k-1]+g[p][j][k-1]; 对于f[i][j];如果i到j可以1步过去,那么=1;否则=inf; 然后跑fl
阅读全文
摘要:异或 【题目描述】 给定一个正整数 n,在 [1,n]的范围内,求出有多少个无序数对(a,b)满足 gcd(a,b)=a xor b。 【输入格式】 输入共一行,一个正整数 n。 【输出格式】 输出共一行,一个正整数表示答案。 【输入输出样例】 【输入样例】 3 【输出样例】 1 【样例解释】 只有
阅读全文
摘要:题面 刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~) 本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念;
阅读全文
摘要:题面 // <![CDATA[ hitokoto() // ]]> 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个; s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]>=1; s[i]-s[i-1]<=1; s[i
阅读全文
摘要:题面 题面说的乱糟糟的看起来似乎是个可持久化线性基; 然而~ 一个式子搞定一切: a^b<=a+b 那么把所有数异或起来便是答案;
阅读全文

浙公网安备 33010602011771号