自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 省队集训Round3 DAY6

T1题解这道题应该是可以通过组合数直接计算的,但是我不会数学证明,所以就用了一种简单粗暴的方式。 ans=∑2|iC(n,i)∗C(n,n−i)ans=\sum_{2|i} C(n,i)*C(n,n-i) ans=∑2|iC(n,i)2ans=\sum_{2|i} C(n,i)^2 101810^18肯定不能直接枚举,如果要计算的话也需要用到lucas定理。观察发现这题的模数

2017-08-20 11:20:15 1552 1

原创 省队集训Round3 DAY5

T1题解考试的时候考虑了两种方法,但是无法处理n%3=1的部分情况。 首先n%4==3或n%4==0都可以填成一个两个行的矩阵,先填好前四个,然后四个一循环 如果n%3==2或n%3==0,那么先填好前三个,然后三个一循环。 剩下的怎么办呢? 先把前三个填好,然后剩下的两两一组,每次增加两列一行。 如果最后是偶数,那么直接增加两列就可以了。代码#i

2017-08-20 11:19:58 804

原创 省队集训Round3 DAY4

T2题解讲序列分成三部分,大根堆,缓冲区s,小根堆。 任意时刻保证mid在缓冲区中,并且尽量保证大根堆和小根堆的大小尽量相等。 均摊时间复杂度为O(nlogn/s+n)O(nlogn/s+n)代码#include#include#include#include#include#define LL long long #define mod 1000000

2017-08-20 11:19:39 839

原创 省队集训Round3 DAY2

T3 题解首先我们需要计算出M。 N为奇数,中间位不受反转的影响(翻转后每一位异或1),即这一位的位置不会改变,如果反转只可能是0->1。所以我们可以把中间位当成标记位,刚开始编码的时候为0,如果给出的编码中间位为1,那么说明反转过了,需要逆操作后再进行解码,M=2N−1M=2^{N-1} N位偶数,把数列从中间劈开,后一半是前一半反转后的结果,这样的数列如果进行反转操作得到

2017-08-20 11:19:08 601

原创 省队集训Round3 DAY1

T1 题解大概的思路就是对于每个位置的数,如果他前面比他大的数的个数>=k,那么将他向前移动k位,否则扔到一个数组中。最后对这个数组从小到大排序,然后将数组中的数插入序列中的空位置。 为什么这样做是对的,对于前面比他大的数个数大于等于k的数来说,他们是没有机会自己移动的,只可能是他前面比他大的前k个数向后移而使他向前移动。对于小于k的数来说,首先他前面比他大的数会使他向前移动,

2017-08-20 11:18:51 682

原创 省队集训Round2 DAY7

T2 题解考虑最暴力的做法,实际上就是枚举选中区间的左右端点,然后用点分判断选出的点构成的合法路径和未选中的点构成的合法路径的大小。 如果再优化一点可以,枚举其中一个端点,另一个端点动态的维护,有点类似动态点分的样子。 这么做的瓶颈在于枚举端点。首先如果右端点如果右移的话,那么满足条件的区间左端点的位置实际上是单调不降的。如果我们能预处理出某个东西,然后O(1)的判断, 那么

2017-08-20 11:18:30 566

原创 省队集训Round2 DAY3

T3 题解要求每一个时间每条边只能有一个人经过,每个人在到达终点前的任意时刻都不能停止。 那么我们可以二分一个最晚的时间mid,然后建mid层结点,每条有向边x->y从i层的x结点连向i+1层的y结点,容量为1。然后跑最大流如果最后满流,那么说明mid可行,继续减小二分的范围代码#include#include#include#include#include

2017-08-20 11:17:58 509 1

原创 省队集训Round2 DAY2

T3 题解这道题以前做过一个静态的,就是树在开始的时候直接建好,后面直接查询。 这道题的关键是需要看出集合的构建实际上是一颗树结构,每次就是找到所以点的lca然后新加入的点就是lca的一个新的儿子。 对于查询,我们需要对于所有点按照dfs序排序,然后容斥计算答案。一个点的贡献valval就是他到根路径上所有CiC_i的和。所以我们需要用平衡树动态的维护dfs序和每个点的val

2017-08-19 20:36:27 516

原创 省队集训Round2 DAY1

T1 题解对于每个位置都可以暴力的找到最右边的一个点使之后的点再异或异或和下降。 可以维护一颗主席树,外层表示的是起点,内层表示的是以该点为起点的所以终点的合法区间。 每次利用前缀和作差即可。因为是区间操作所以我们标记永久化一下。代码#include#include#include#include#include#define N 100003using

2017-08-19 20:36:10 616

原创 省队集训DAY6

T1 题解f[i]表示以字符i结尾的字符串的个数。 那么现在加入一个字符产生的贡献就是∑字符集大小i=0f[i]\sum_{i=0}^{字符集大小}f[i],然后把这个答案赋值给这个字符对应的位置。 考虑这么做会不会产生相同的串?假设acbb,考虑插入第一个b的影响会形成ab,cb,acb.那么插入第二个b会形成abb,cbb,acbb发现这些都是新产生的不会与之前的相同,而

2017-08-19 20:35:50 656

原创 省队集训DAY5

T1题解因为是本质不同的字符串,所以考虑什么样的串会产生贡献。 对于一个字符串,我们使他出现的位置尽可能的考前,就是如果这个位置能从第i个串中匹配一定不会在第i+1个串中匹配。这样最先拼凑出的字符串产生贡献1。 如果一个串我们要求本质不同的所有子串,该怎么做?对于原串建立后缀自动机,因为根节点到后缀自动机中的每个节点形成的路径都是一个本质不同的子串,所以我们按照拓扑须的倒叙更新

2017-08-19 20:35:30 648

原创 省队集训DAY4

T1 题解将行与列分开考虑,每两个#之间属于一个连通块。 对于每个连通块建立节点,如果只从连通块中选取一个点,那么不会产生相互攻击的棋子。选取第2个点的时候会产生1的贡献,选取第三个点的时候会产生2的贡献。。。。 行列都是如此,那么S->行所代表的连通块,列代表的连通块->T。对于每个连通块连size条边,每条边的容量为1,费用依次递增。 对于每个不是#的位置,一定属于两个连通

2017-08-19 20:35:09 551

原创 省队集训DAY3

T1题解一共要使用六根木棍,那么分割的方法就两种{1,1,1,3},{1,1,2,2} 那么关键就是要计算2,3的数量。 cnt1[i]表示每种长度的木棍的方案数 cnt2[i]最初表示用不同的木棍拼成长度为i边的方案数,后来表示选出四根木棍构成{2,2}的方案数。 cnt22[i]表示用两个长度相同的不同木棍拼成长度为i的边的方案数。 cnt3[i]表示用三根不同的木棍

2017-08-19 20:34:27 549

原创 省队集训DAY2

T1题解假设我们枚举数列{ai}中长度为len的区间,那么如何判断两个数列可以匹配呢? 对于提取的数列从小到大排序,{bi}从大到小排序,然后两两配对,如果所有的都满足>=h>=h,那么就可以匹配。应该算是贪心吧。 这样做的时间复杂度是O(n∗len∗loglen)O(n*len*\log len) 还是上面的思想,我们如何快速判断呢? 假设我们确定了{ai}提取出的区间数

2017-08-19 20:34:06 620

原创 [校内互测]20170402

T1 题解因为有限制的商店比较少,且有限制的商店的最高总消费是90000 所以我们考虑对有限制的商店看成是每个组有wi个物品体积是1…wi的多重背包问题。 f[i]表示的是总体积是i的方案数。 需要先枚举每个物品,在倒序枚举总体积,然后枚举当前物品选取的体积。这样子会TLE,所以我们需要前缀和优化一下,减去枚举当前物品选取的体积的那一层。 那么剩下的都是无限制的商店,可以

2017-08-19 20:32:25 611

原创 FJWC2017 Day3 T2 recollection (后缀自动机+线段树合并)

题目描述传送门题目大意: 现在有一棵n个节点的树,点的编号是1到n,1号点是根节点,每条边上有一个字符(用不大于300的非负整数表示),且对于任意的一个点u,e:u→v(u=father[v])e:u→v(u=father[v])上的字符互不相同。 定义r(u)为从节点u到根节点的路径上的字符组成的字符串。 两个节点u,v的相似度f(u,v)定义如下: f(u,v)=Lcp(r(

2017-08-19 20:32:05 1752

原创 FJWC2017DAY1题解

T1 矩阵填数题目描述传送门给定一个h∗w的矩阵,矩阵的行编号从上到下依次为1..h,列编号从左到右依次1..w。在这个矩阵中你需要在每个格子中填入1..m中的某个数。给这个矩阵填数的时候有一些限制,给定n个该矩阵的子矩阵,以及该子矩阵的最大值v,要求你所填的方案满足该子矩阵的最大值为v。现在,你的任务是求出有多少种填数的方案满足n个限制。两种方案是不一样的当

2017-08-19 20:31:30 1123

空空如也

空空如也

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

TA关注的人

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