自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GODSPEED

这世界从来就只有强者的奋斗史,而没有弱者的墓志铭

  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 CodeForces 612e Square Root of Permutation(置换+构造)

题意:给出一个1到n的序列,定义运算p[I] = q[q[I]],q为p的平方根,现在给出p,求出任意一个符合题意的q。思路:将序列视为一个有向图,对于每个位置,将I和p[I]之间连一条边,可以发现,一个序列是由若干不相交的环组成的,而且对于平方运算,奇环长度不变,偶环分裂成两个小的环,所以可以将p中所有的环求出来。对于奇环,认为他们原先是由奇环组成的,并求出原先的奇环对于偶环,将两个

2016-04-30 16:09:55 730

原创 CodeForces 609E Minimum spanning tree for each edge (lca+最小生成树+倍增)

题意:给出一个n个点m条边的无向图,问每条边所在的最小生成树的权值和是多少。思路:首先求出整个图的最小生成树,然后对于任意一条边替换这条边两点到lca的最大边,这个值就是这条边所在的最小生成树的权值和,可以用倍增记录一下每个点的祖先和到这个祖先的最大边,然后处理出lca,对于每条边求出答案。#include #define eps 1e-6#define LL long long#d

2016-04-26 12:41:24 1218

原创 CodeForces 669E Little Artem and Time Machine(主席树+树状数组)

题意:维护一个multiset,给出n次询问,有三种类型的操作,分别是增加元素,删除元素,查询元素数量,每次询问操作有一个时间和一个元素,询问这个时间的时候这个元素的数量。思路:主席树+树状数组,其中时间可以看成主席树的位置,然后就是用树状数组动态修改主席树中的元素,离散化一下时间和元素然后每次查询输出。树状数组每个结点都是一棵线段树,表示一个区间内所有元素的数量情况,具体见动态主

2016-04-25 22:13:35 716 2

原创 CodeForces 600E Lomsat gelral(树形dp+启发式合并)

题意:给出一棵树,每个节点有一个颜色,求每个节点的子树中颜色数目最多的颜色的和。思路:如果开n^2的数组记录每个节点子树中出现的颜色的次数那么时空复杂度都会达到O(N^2),无法承受现在考虑用map来记录每个节点每个颜色出现的数量,用另一个map记录每个结点中出现某个次数的颜色和,然后用启发式合(合并两个结点时遍历小的合并到大的上)并使时间复杂度降到O(n*logn*logn),空间复杂度

2016-04-23 23:13:07 1092

原创 CodeForces 598E Chocolate Bar(DP|记忆化搜索)

题意:有t个询问,每个询问给出一个长为n,宽为m的矩形,现在要切割这个矩形,每次切割的花费为切口长度的平方,现在问要切下一个面积为k的矩形最小花费为多少。思路:枚举切割第一刀的位置,切割第一刀后,矩形被分成两个矩形,枚举在这两个矩形中的最后要求的面积。#include #define eps 1e-6#define LL long long#define pii pair#defi

2016-04-23 19:11:30 532

原创 CodeForces 665E Beautiful Subarrays(Trie)

题意:给出一个序列,问有多少个子序列的异或的值大于等于k。思路:首先预处理出一个异或的前缀值,对于一个位置j,我们的目标是找到所有的I=k如果一个一个的求异或值,复杂度为O(n^2),现在考虑一位一位的比较将前缀的异或值的二进制字符串插入到trie树中,结点的权值为以这个前缀开头的字符串数量记录当前已走过的二进制位的和为sum,当前二进制位为b,对于当前深度I,如果sum+(1=k

2016-04-21 20:54:09 952

原创 CodeForces 653F Paper task(rmq+二分+后缀数组)

题意:给出一个有左右括号组成的字符串,现在问这个字符串中有多少个不重复的正规的括号序列。思路:首先如果不考虑重复,我们可以求出有多少个包含重复的正规的括号序列,方法是将左括号记为+1,右括号记为-1,处理出前缀和对于以i开始的括号序列,所有满足j>i且sumv[j]=sumv[I-1] 且这段区间内的所有前缀和sumv[k]>=sumv[I-1]那么j就是一个满足条件的终止位置。所

2016-04-21 00:45:40 549

原创 CodeForces 653E Bear and Forgotten Tree 2

题意:给出n个点,现在有m对点之间不能连边,现在问能否保证构造出一棵结点1的度为k的树。思路:如果没有结点1必须度数为k这个限制,只需要dfs一下看是否联通就行。现在考虑这个限制,只需要不考虑结点1看剩下的结点能构成几个连通块,且每个连通块有多少个点可以和1相连,最后只要满足三个条件就能够造出来:1.每个连通块至少有一个点可以和1相连2.连通块的数量小于等于k3.所有连通块中能

2016-04-20 19:51:25 469

原创 WUST OJ 1579 Camellia(数位dp)

题意:给出一个区间,求出这个区间内所有数的数位方差之和。数位方差定义为将一个数的每位数字看成一串随机变量的方差。题目链接:WUST OJ 1579 Camellia思路:数位dp。首先可以化简求方差和的公式,对于所有长度为n,和为s,每位数可以任意去0-9的数(可以有前导0),首先假设这样的数有t个,那么他们的方差和为(n*sigma(x*2)+ t*s*s)乘以n^2的逆元,也就

2016-04-16 22:11:01 551

原创 CodeForces 660F Bear and Bowling 4(斜率DP+二分)

题意:给出n个数,可以任选一段连续子串,使得sigma(i*s[I])最大。思路:记录前缀和为sum,数字与下标乘积的前缀和记为mul,对于一个给定的位置I,问题转化为了求mul[I]-mul[j]+sum[I]-sum[j]的最大值,这个可以维护一个凸壳,然后每次二分斜率来做。#include#define eps 1e-6#define LL long long#define

2016-04-15 19:20:00 715 1

原创 CodeForces 660E Different Subsets For All Tuples(动态规划)

题意:给出一个有m个字符组成的所有长度为n的字符串的集合,现在问每个字符串的不同子串之和是多少。思路:首先用dp[I]表示长度为n的所有字符串的子串数量,假设当前已经处理了长度为i1的字符串集合,现在要处理长度为I的字符串集合考虑在长度为I-1的字符串集合的每一个字符串后面加一个字符那么数量增加了dp[I-1]-dp[lastpos-1],lastpos是当前字符出现的最后一个位置

2016-04-15 16:13:45 766 3

原创 CodeForces 660D Number of Parallelograms(水题)

题意:给出平面上n个点,问能组成多少平行四边形。思路:先将能组成的线段求出来,然后对于线段按照端点横纵坐标之差排序,最后计数。#include#define eps 1e-6#define LL long long#define pii pair#define pb push_back#define mp make_pair//#pragma comment(linker, "

2016-04-15 14:44:31 422

原创 WOJ 1578 Fishing Dream(莫队算法)

题意:给出一个n个元素的序列,现在有m个询问,询问这个区间内有多少组连续的元素。思路:莫队算法。将询问排序,每次查询的时候如果区间增大,则判断增加的这个元素两边元素的数量,如果同时小于两边元素数量,则操作数减一,若同时大于等于两边元素,则操作数加一;删除元素操作类似。#include#define eps 1e-6#define LL long long#define pii pai

2016-04-13 16:44:45 305

原创 WOJ 1605 Distance on Tree(莫队算法)

题意:给出有n个结点的一棵树,并给出参数k,除了0结点外每个节点i与I/k连有一条权值为i的边,现在有q组询问,每组询问查询[I,j]中任意两个节点之间的距离之和。思路:假设当前查询区间为[L,R],那么每个结点u往上连的那条边对答案的贡献度为d[u]*(R-L+1)*u,其中d[u]表示u有多少子孙结点在[L,R]中,然后对于这n-1条边的贡献度求和即可。然后就可以用莫队算法来做了,

2016-04-10 00:31:07 420

原创 WOJ 1608 Calculation(状态压缩)

题意:给出n个数(n思路:状态压缩,每个状态表示当前的状态可以分成多少组含有s的组,然后状态转移即可。#include#define eps 1e-6#define LL long long#define pii pair#define pb push_back#define mp make_pair//#pragma comment(linker, "/STACK:10240

2016-04-09 21:38:20 440 1

原创 CodeForces 626E Simple Skewness(三分)

题意:给出一个数的集合,求平均数减去中位数最大的子集。思路:首先可以证明的是这个集合里的元素个数一定为奇数。假设这个差最大的子集中有偶数个元素,那么去掉中间较大的元素后对平均数减小的影响比对中位数的减小影响小,所以最后的解更优了,所以最后的集合的元素数量一定是奇数。现在可以枚举中位数了,贪心的来想,先将元素排序,然后尽可能取符合条件的大的数放进集合,随着集合数量的增大答案先增大后减小,

2016-04-08 00:53:05 674

原创 CodeForces 626F Group Projects(dp)

题意:有n个商品,每件商品有一个价值,现在要把商品分组,求每组的最大价值与最小价值的价格差的和不超过m种的分组种数。思路: 这道题dp状态不太好想,很容易想到一种状态是用dp[I][j][k]表示前I;件分成j组价格差为k的分组种数,但这样想出来的状态无法转移.考虑将所有商品的价值按降序排列,每一组的价格差其实就是每一组相邻两件商品价格差的和,进一步说,就是最大值与最小值之间所有值的价格差

2016-04-06 22:38:16 935 1

原创 CodeForces 627D Preorder Test(树形DP+二分)

题意:给出一棵无根树,每个节点有一个权值,现在要让dfs序的前k个结点的最小值最大,求出这个值。思路:首先可以对这个值v进行二分,对于树中大于等于v的标记为1,否则标记为0.现在问题转化为求出一个dfs序,使得dfs序中的至少有k个1,这一步可以用树形dp来做。用dp[u]表示从节点u开始在子树中进行dfs最多可以经过多少个为1的结点,显然,若某一个子树中节点全为1,那么这个可以加到d

2016-04-04 00:50:40 785

原创 Gym 100942I Manhattan Project (set)

题意:在一个四维空间内,有三种操作,增加一个点,删除一个点,给定一个点并查询与这个点距离最远点的距离。定义任意两个点之间的距离为他们之间的曼哈顿距离|x1 - y1| + |x2 - y2| + |x3 - y3| + |x4 - y4|.。思路:这道题的关键是如何处理绝对值符号,因为对于任意两个点,一共可能有16种运算可能。解决这个问题可以通过开16个优先队列来解决,然后再用一个set记

2016-04-03 04:32:42 500

原创 CodeForces 631E Product Sum(斜率优化DP+二分|三分)

题意:给出n个数,现在可以移动一个数的位置,现在要使和sigma(ai*i)最大,询问这个最大和。思路:将一个数向左移动和向右移动是一样的,现在考虑向左移动。先预处理出前缀和,将一个数向左移动后,那么改变量为sum[r-1]-sum[l-1]+a[r]*(r-l),考虑枚举r,那么和r有关的数据就变成了常量。现在问题转化成了求a[r]*l-sum[l-1],注意到这里l和sum[l-]

2016-04-01 19:24:56 1204

百鸡问题详解

c语言实验题中的百鸡问题对理解c语言很有帮助多看无害

2014-04-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除