02 2017 档案

摘要:题意:有N个人M个房间,初始时所有人都在1号房间,维护:1、让某个人去某个房间 2、假如[l,r]中所有的人还未一起统计过,Ans+=人数。输出Ans 题解: 集合HASH get 根据异或的性质,a^x^x=a,因此一个集合的HASH值就是其所有元素的异或起来的值 接下来就是STL大法好 将每个房 阅读全文
posted @ 2017-02-28 23:44 WDZRMPCBIT 阅读(121) 评论(0) 推荐(0)
摘要:题意:给定a b c d n m,fi,j满足f1,1=1 fi,j=afi,j-1+b fi,1=cfi-1,m+d,求fn,m%P 题解: a=1且c=1时\[{f_{n,m}} = 1 + b(m - 1)n + d(n - 1)\]否则\[\left( {\begin{array}{*{20 阅读全文
posted @ 2017-02-28 23:41 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:给定一张图,求:1、最大流 2、最大流方案中,流量最大的一条边 题解: 第一问裸题 第二问显然Bob要把所有的费用加在流量最大的边上,因此我们二分最长边,每条边的流量改为min{二分出的最大流量,当前边的流量},跑最大流检验。 注意可以是实数流量,比如说: <1,2,3> <3,2,3> <2 阅读全文
posted @ 2017-02-28 23:32 WDZRMPCBIT 阅读(165) 评论(0) 推荐(0)
摘要:题意:有N个人,每个人有一个初始想法(0/1)和ki个朋友,安排每个人的最终想法,使得|违心的人数+不同意见的朋友的对数|最小 题解: S向每个0连流量为1的边,表示违心;同理每个1向T连流量为1的边。如果两人是朋友,连一条流量为1的边,表示可以对立。 然后网络流/最小割走起。 #include < 阅读全文
posted @ 2017-02-28 23:29 WDZRMPCBIT 阅读(136) 评论(0) 推荐(0)
摘要:题意:给定一个序列,维护:1、插入一个元素 2、求相邻两个元素中,差值绝对值的最小值 3、求序列排序后相邻两个元素中,差值绝对值的最小值 题解: MIN_GAP:如果我们把数看成一组一组,每次插入数字都在一组的最后插入,那么答案只有可能在组内和组间两个位置产生,定义l[i]为一组数中最左边的数,r[ 阅读全文
posted @ 2017-02-28 23:26 WDZRMPCBIT 阅读(127) 评论(0) 推荐(0)
摘要:题意:Xn+1=(aXn+c)%M,求XN%G 题解:矩阵乘法裸题 #include <cstdio> #include <cstring> #include <cstdlib> #include <climits> #include <iostream> #include <algorithm> 阅读全文
posted @ 2017-02-28 23:23 WDZRMPCBIT 阅读(211) 评论(0) 推荐(0)
摘要:题意:给定一颗字符树,求树中路径所构成的不同的字符串的数量,其中AB和BA视作不同的字符串 题解: 题目里有这样一句话:太阳花田的结构比较特殊,只与一个空地相邻的空地数量不超过20个。 一共有10W个点,却只有20个叶子……因此树上所有的字串就是以叶子为起点搜索出的所有字串,丽洁姐真的好善良啊- - 阅读全文
posted @ 2017-02-28 23:20 WDZRMPCBIT 阅读(167) 评论(0) 推荐(0)
摘要:题意:初始时给定一个空串,在其后不断加字符,求每次加入后不同子串的数量 题解: 当时拿到这个题一眼看出用后缀数组啥的,然而我并不会QAQ……不耸,不会后缀数据结构我们会HASH是不是,于是用HASH水了30分,能进R2真是命大2333 讲题的时候标算用的后缀数组,不过看他写了半个黑板就感觉好麻烦。Y 阅读全文
posted @ 2017-02-28 23:18 WDZRMPCBIT 阅读(124) 评论(0) 推荐(0)
摘要:题意:给定一个字符串,维护:1、在当前字符串后面插入一个字符串 2、询问一个字符串在当前字符串中出现的次数。强制在线 题解:维护自动机,一个字符插入之后其祖先的出现次数全部++,这个可以拿LCT或者暴力来维护,链上修改单点查询。 #include <cstdio> #include <cstring 阅读全文
posted @ 2017-02-28 23:15 WDZRMPCBIT 阅读(123) 评论(0) 推荐(0)
摘要:题意:求一个字符串的第K小字串,T=0表示不同位置相同的子串算作一个,T=1算作多个 题意: 建出SAM来跑第K子串,由于一个点所代表的子串在原串出现次数为其子树叶子结点的数量,因而有: T==1,每个点的|right|=1 T==2,每个点的|right|=子树叶子结点数 BFS跑出所有子串出现的 阅读全文
posted @ 2017-02-28 23:13 WDZRMPCBIT 阅读(143) 评论(0) 推荐(0)
摘要:题意:给定一张无向图,有K个人,每一时刻K个人可以同时走(也可以停在一个节点),在到达i之前必须先到达i-1,求从0到N,K个人走的最小距离和(只需一个人到达即可) 题解: 用Floyd跑出任意两个城市i j间的最短路,更新的前提是k<j(要到达城市j必须先到达1->j-1) 将每个城市拆成两个点A 阅读全文
posted @ 2017-02-28 23:10 WDZRMPCBIT 阅读(169) 评论(0) 推荐(0)
摘要:题意:有n类产品,其中第i类产品共需要Ci件。有m名员工,员工能够制造的产品种类有所区,一件产品必须完整地由一名员工制造,对于员工i,他的愤怒值与产品数量之间的函数是一个Si+1段的分段函数。当他制造第1~Ti,1件产品时,每件产品会使他的愤怒值增加Wi,1,当他制造第Ti,1+1~Ti,2件产品时 阅读全文
posted @ 2017-02-28 23:06 WDZRMPCBIT 阅读(172) 评论(0) 推荐(0)
摘要:题意:给定一张有向图,求一个路径集合,集合中的路径满足:1、起点为1,终点出度为0 2、集合中的路径覆盖了所有的点 3、在满足前两个条件的基础上,路径权值和最小 题解: 显然是个带下界的有源费用流。按照如下方式建模,对于一条边权为w的边(u,v)和任意一个点x x向T连容量为k费用为0的边,表示其后 阅读全文
posted @ 2017-02-28 23:02 WDZRMPCBIT 阅读(151) 评论(0) 推荐(0)
摘要:题意:有N种菜,M位厨师,每位厨师做每种菜的时间不同。有K个人,每个人点ki个菜,求最小等待时间。 题解: 和BZOJ1070一个题,不过多了一个N,因此考虑优化。 显然决策倒数第K个菜的前提是倒数第K-1个菜已经决定完成,因此SPFA每搜出一条路径,就在这个厨师这里加边。说白了就是动点。 #inc 阅读全文
posted @ 2017-02-28 22:58 WDZRMPCBIT 阅读(143) 评论(0) 推荐(0)
摘要:题意:给定N辆车和M个人,每个人修每辆车的时间不同,安排修理顺序使得修理这N辆车时间总和最小 题解: 将每个工作人员拆点,某个车b向ai连边表示工作人员a倒数第i个修理该车,显然其对答案的贡献(该边费用)就是w[b][a]*i(其后所有等待的车都要受其影响,而之前的车都不会)。 构图两排点,左边是车 阅读全文
posted @ 2017-02-28 22:55 WDZRMPCBIT 阅读(136) 评论(0) 推荐(0)
摘要:题意:给定一张有向图,求1到N:1、最多有多少条不相交的路径 2、在第一问的基础上,求所有路径的最小距离和 题解:拆点之后费用流裸题 #include <queue> #include <cstdio> #include <cstring> #include <cstdlib> #include < 阅读全文
posted @ 2017-02-28 22:51 WDZRMPCBIT 阅读(123) 评论(0) 推荐(0)
摘要:题意:一个N M的矩形区域。格子如果是'.',那么表示这是一块空地;如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也 阅读全文
posted @ 2017-02-28 22:47 WDZRMPCBIT 阅读(139) 评论(0) 推荐(0)
摘要:题意:求一张图的最大独立点集 题解:先用Floyd把每个点是否连通跑出来,然后拆点做二分图,左边一列,右边一列,如果u v连通,则将左边的u和右边的v相连,由于需要求一个最大的点集使得其中的任意两个点均不连通,所以跑最大独立集=总点数-最大匹配。 #include <queue> #include 阅读全文
posted @ 2017-02-28 22:43 WDZRMPCBIT 阅读(130) 评论(0) 推荐(0)
摘要:题意:求1到N的所有最短路方案上的最大流,阈值在每个点上 题解:呵呵哒 #include <queue> #include <vector> #include <functional> #include <cstdio> #include <cstring> #include <cstdlib> # 阅读全文
posted @ 2017-02-28 22:41 WDZRMPCBIT 阅读(147) 评论(0) 推荐(0)
摘要:题意:有三种人:1、该校回家生 2、该校不回家生 3、非该校住宿生。给出人的认识关系,假若a认识b,则b(a)可以睡在a(b)的床上,只有该校的学生有床,回家生不占床位,求是否能让所有留宿的人都有床睡 题解:建二分图,左边是宿舍右边是学生。从S向需要宿舍的学生连边,从能提供宿舍的位置向T连边,如果某 阅读全文
posted @ 2017-02-28 22:37 WDZRMPCBIT 阅读(107) 评论(0) 推荐(0)
摘要:题意:给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D 题解:D=A*B*AT-A*C,逐项分析,减号前面那一项,是如果要拥有B[i][j]的价值,前提是A[i]=A[j]=1;减号后面那一项,是要让A[i]=1 阅读全文
posted @ 2017-02-28 22:34 WDZRMPCBIT 阅读(166) 评论(0) 推荐(0)
摘要:题意:给定一张图,求每一条边:1、是否在一个最小割的方案里 2、是否在每一个最小割的方案里 题解: 先做最小割,然后在残余网络上缩点。对于一条边(u,v) 如果f[u]!=f[v],则(u,v)可以在某个最小割上(缩点后的图上的边均为满流边) 如果f[u]==f[S] && f[v]==f[T],则 阅读全文
posted @ 2017-02-28 22:31 WDZRMPCBIT 阅读(166) 评论(0) 推荐(0)
摘要:题意:给定一个N*N的网格,每个格点均与周围的八个点连边,每条边有一个边权,求安排每个点的点权h,使$\sum\limits_{e \in G} {e.w \times \min \{ ({h_{e.u}} - {h_{e.v}}),0\} }$最小 题解:所有高度一定不是0就是1,而且一定有一条线 阅读全文
posted @ 2017-02-28 22:27 WDZRMPCBIT 阅读(150) 评论(0) 推荐(0)
摘要:题意:给定一张平面图,求其最小割 题解:这里 #include <queue> #include <functional> #include <cstdio> #include <climits> #include <cstring> #include <cstdlib> #include <ios 阅读全文
posted @ 2017-02-28 22:21 WDZRMPCBIT 阅读(136) 评论(0) 推荐(0)
摘要:题意:初始时给定一张图,然后往图上不断加边,每次加边后询问最少需要删除多少条边,使得新加入的边可以出现在最小和最大生成树上 题解: 如果u,v之间不存在路径,直接塞进去就好,着重讨论一下之前已经存在路径的情况。(以下以最小生成树为例,最大生成树随便YY一下就出来了- -) 显然加入新的边之后会形成环 阅读全文
posted @ 2017-02-28 22:19 WDZRMPCBIT 阅读(205) 评论(0) 推荐(0)
摘要:题意:N*M的网格中有K个植物,每个植物可以保护一些格点,如果该植物没被吃掉,则被保护的格点不可到达,每个僵尸只能从最右边进入,从右往左吃,每个植物有一定价值,求一个吃植物的顺序使得被吃植物价值和最大。 题解: 最大权闭合子图+拓扑排序的说…… 首先根据保护关系建边,由保护指向被保护,保护关系有两种 阅读全文
posted @ 2017-02-28 22:16 WDZRMPCBIT 阅读(220) 评论(0) 推荐(0)
摘要:题意:给定N个用户和M个基站,每个基站有建设费用,每个用户由(a,b,c)描述,表示a b基站都建好后能获得c的收益,求最大获利 题解: 推荐论文:胡伯涛-《最小割模型在信息学竞赛中的应用》 然后说一下我的理解,我么按如下方式建图:每条边看作一个点,然后划分成二分图,左边一列是原图中的点也就是发送站 阅读全文
posted @ 2017-02-28 22:11 WDZRMPCBIT 阅读(131) 评论(0) 推荐(0)
摘要:题意:有N种食材,每种食材有两种烹饪方法,存在M组约束关系——A用哪种手法烹饪,B用哪种手法烹饪——问是否存在烹饪序列满足要求。 题解: 所谓2-SAT问题,是指我们有多个集合,每个集合里只有两个元素A,A'(或者是B,B' C,C'……),某些集合之间存在约束关系,比如说选了A就必须选B,选了B' 阅读全文
posted @ 2017-02-28 22:07 WDZRMPCBIT 阅读(169) 评论(0) 推荐(0)
摘要:题意:有N个问题和M种解法,每个问题可以用两种解法,每种解法只能用一次,求最多能解决的问题的数量 题解: 二分图裸题,另附二分图的一些性质: 1 最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数 2 最小路径覆盖: 阅读全文
posted @ 2017-02-28 22:04 WDZRMPCBIT 阅读(144) 评论(0) 推荐(0)
摘要:题意:给定一个N*M的网格,每个格子均为白色或黑色,每次可以交换两行或两列,求是否可以通过有限次操作使得从左上到右下的对角线上所有的格子均为黑色 题解:首先,同一列上的格子无论怎么变换都在同一列上,同一行上的格子无论怎么变换都在同一行上,因此问题转化为求既不在同一列也不在同一行上的黑色格子的数量与N 阅读全文
posted @ 2017-02-28 22:01 WDZRMPCBIT 阅读(139) 评论(0) 推荐(0)
摘要:题意:给定一个由1-N不重复组成的序列a,再给出N个数的序列b,求是否存在一个序列c,使得任意一个位置i均满足(ai+bi)%N=ci || (ai-bi+N)%N=ci,并求字典序最小的c 题解: 任意一个ai只能变成两个数,所以我们可以建二分图看是否存在完全匹配来确定是否存在合法序列。 由于方案 阅读全文
posted @ 2017-02-28 21:57 WDZRMPCBIT 阅读(122) 评论(0) 推荐(0)
摘要:题意:给定一个有N个点的环,每个点上有一个数字,每次可以让一个点--然后左边或右边的点++,求最少操作次数 题解: 定义第i个熊孩子向他左边(也就是第i-1个熊孩子)传递的糖果数为Ci,根据题意最后每个熊孩子手里都有A=sum(ai)/n个糖果,因此:a1-C1+C2=a2-C2+C3=……=an- 阅读全文
posted @ 2017-02-28 01:56 WDZRMPCBIT 阅读(190) 评论(0) 推荐(0)
摘要:题意:有N个小矮人,他们从脚到肩膀的高度Ai,胳膊长度为Bi。陷阱深度为H。如果我们利用矮人1,矮人2,矮人3……矮人k搭一个梯子,满足A1+A2+A3+….+Ak+Bk>=H,那么矮人k就可以离开陷阱逃跑了,一旦一个矮人逃跑了,他就不能再搭人梯了,问最多可以使多少个小矮人逃跑。 题解: 由于不管怎 阅读全文
posted @ 2017-02-28 01:52 WDZRMPCBIT 阅读(192) 评论(0) 推荐(0)
摘要:题意:给定B,U和数组c,求在不超过U的情况下,从c中选择部分元素*(1或-1)使得B+所选元素之和最大 题解:太水不想说什么了- -,f[i][j]记录第i个歌曲能否到达音量j #include <cstdio> #include <cstring> #include <cstdlib> #inc 阅读全文
posted @ 2017-02-28 01:49 WDZRMPCBIT 阅读(178) 评论(0) 推荐(0)
摘要:题意:有一个长度为n的整数序列A,将其变为严格单增序列,求:1、最少需要改变多少个数 2、在改变的数最少的情况下,每个数改变的绝对值之和的最小值 题解: 第一问太水,a[i]-=i之后直接跑最长上升子序列即可。 第二问太神,完全没思路,正解 #include <cmath> #include <cs 阅读全文
posted @ 2017-02-28 01:44 WDZRMPCBIT 阅读(130) 评论(0) 推荐(0)
摘要:题意: 给出一个网格图,假设每个格子中有好多财宝,每次从左上角出发,只能向下或右走,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完。 题解: 为了方便我们将原矩阵处理一下,将每一行都反转,即swap(g[i][j],g[i][n-j+1])(读入g[i][j]的时候j=m- 阅读全文
posted @ 2017-02-28 01:41 WDZRMPCBIT 阅读(122) 评论(0) 推荐(0)
摘要:题意:对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax2 < … < axm)。那么就称P为S的一个上升序列。如果有多个P满足条件,那么我们想求字典序最小的那个。任务给出S序列,给出若干询 阅读全文
posted @ 2017-02-28 01:38 WDZRMPCBIT 阅读(142) 评论(0) 推荐(0)
摘要:题意:一批货物从码头A运到码头B,需要n天才能运完,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。修改路线会带来额外的成本。物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小。 题解: 首先定义cost[i][j]=从第i天到第j天都可以使用的港口所组成 阅读全文
posted @ 2017-02-28 01:30 WDZRMPCBIT 阅读(137) 评论(0) 推荐(0)
摘要:题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 题解: 对于任意一行,我们都可以将其压缩成一个二进制数,第a位是1表示放置国王,否则不放置。 定义f[i][j][k]为到第i行已经放置了j个 阅读全文
posted @ 2017-02-28 01:27 WDZRMPCBIT 阅读(113) 评论(0) 推荐(0)
摘要:题意:(没图不好说……) 题解: 自己计算出前三种方案后,发现和Catalan数的前三项契合,因此就当Catalan数写了,最后竟然过了- -。(结论就是多背几个数列还是有好处的) AC之后看了题解,才知道具体是怎么证的。 通过包含左下角那个方块的方块,可以将楼梯划成两个部分。也就是说,第i层楼梯和 阅读全文
posted @ 2017-02-28 01:16 WDZRMPCBIT 阅读(150) 评论(0) 推荐(0)
摘要:题意:求最小生成树 #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <queue> #include 阅读全文
posted @ 2017-02-28 01:14 WDZRMPCBIT 阅读(122) 评论(0) 推荐(0)
摘要:题意:给定一个数列,维护:1、区间求和 2、区间开根号 题解: 线段树,唯一的优化就是如果某区间的和为0和1,就不再向下进行更新。(注意long long) 另外动态开内存真的好慢- -,我的机子上3s(注意是s)才跑完一次,评测机T的不要不要的。 #include <cmath> #include 阅读全文
posted @ 2017-02-28 01:12 WDZRMPCBIT 阅读(152) 评论(0) 推荐(0)
摘要:题意:给定一个N*M的格点图,从(0,0)看最多能看到多少个点 题解: 首先,对于能够从左下角看到的座标(x,y),gcd(x,y)==1。然后就是求x=1->n,y=1->n且gcd(x,y)==1的坐标的数量。就是求x和y互质的坐标的数量。我们只保留左下角的三角形部分,那么就是求phi(i)(i 阅读全文
posted @ 2017-02-28 01:10 WDZRMPCBIT 阅读(126) 评论(0) 推荐(0)
摘要:题意:给定一有M个点的环,有N个人绕着环走,每个人i从si开始,每次走pi个点,一共走ti次,求最少需要多少个点使得所有人都不会相遇 题解: 暴力枚举山洞的数量,检查就可以了。 i,j(j>i)能相遇,则(k*p[i]+c[i])%m=(k*p[j]+c[j])%m且k<=(l[i],l[j])。调 阅读全文
posted @ 2017-02-28 01:08 WDZRMPCBIT 阅读(168) 评论(0) 推荐(0)
摘要:题意:给定一张图,求大于最小生成树上最长边的a[i]个数 题解: 跑Kruscal,看有几个猴子跳的距离比最小生成树上的最长边要远。 至于为什么,可以证明,如果不是最小生成树,那么一定存在一个边比最小生成树上的最大边要长。(有兴趣可以看一下次小生成树) #include <cmath> #inclu 阅读全文
posted @ 2017-02-28 01:05 WDZRMPCBIT 阅读(138) 评论(0) 推荐(0)
摘要:题意:(没图不好说……) 题解:估价函数为当前状态与目标状态不同的格子数的数量-1 #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <climits> #include <iostre 阅读全文
posted @ 2017-02-28 00:59 WDZRMPCBIT 阅读(164) 评论(0) 推荐(0)
摘要:题意:给定一个N*M的网格,有些格为特殊格:1、可以传送到同一列的某一格 2、可以传送到同一行的某一格 3、可以传送到周围八个格的某一格。可以任意选择开始的格,结束的格不限定,除了特殊格外其他格均不与其他格相连,求可以经过的最多不同格子数。 题解:每个门向其他可以到达的有门的房间连边,然后缩点,拓扑 阅读全文
posted @ 2017-02-28 00:24 WDZRMPCBIT 阅读(194) 评论(0) 推荐(0)
摘要:题意:给定一无向图,选择最少的点,使得删除任意一个点后,其他的点都与所选择的点中任意一个联通 题解: 由于割点上肯定不能放井,所以开始时删除所有的割点。然后找出所有的双连通分量,如果双连通分量上有两个及以上割点,不用放井;如果只有一个割点,一定要放一个井,然后乘法原理统计答案即可。 至于怎么求双连通 阅读全文
posted @ 2017-02-28 00:14 WDZRMPCBIT 阅读(150) 评论(0) 推荐(0)
摘要:题意:求图中割点的数量,割点是指无向图中的一个点,满足删除与该点所连的边后原图中曾经相通的点不再连通。 题解:回忆Tarjan求SCC的过程,如果某个点u的某个儿子v及其子树中的所有点的low均大于等于dfn[u](即low[v]<=dfn[u]),那么v子树上的点只能通过u来到达其他节点,因此u是 阅读全文
posted @ 2017-02-28 00:12 WDZRMPCBIT 阅读(170) 评论(0) 推荐(0)
摘要:题意:求一张图的最长链 题解:Tarjan缩点,拓扑排序求最长链,每个点的权值为该点在原图中所包含的点的数量。注意重构图后会有重边影响方案数。 #include <stack> #include <queue> #include <cstdio> #include <cstring> #includ 阅读全文
posted @ 2017-02-28 00:10 WDZRMPCBIT 阅读(197) 评论(0) 推荐(0)
摘要:题意:给定一张无向图,求1到给定点中,点权和最大的路径 题解: 据说是APIO最水的一道题……Tarjan缩点然后SPFA跑最长路(一开始敲成最短路了QAQ),当然也可以拓扑DP不过更麻烦一些 Tarjan的思路就是像遍历一棵树那样遍历整张图,记录每个节点的编号dfn[i]及其DFS树中子树所能回溯 阅读全文
posted @ 2017-02-28 00:08 WDZRMPCBIT 阅读(153) 评论(0) 推荐(0)
摘要:题意:给定一张无向图,图中每条边均为白色或黑色,求有K个白色节点的边权和最小的生成树,数据保证有解 题解: 比较直观的想法是跑一个最小生成树,然后不断换边使得白边的数量等于K 然而我们可以给所有白边加上一个值,使其被选的几率增大或减小,而赋的值可以通过二分来找到。 #include <cstdio> 阅读全文
posted @ 2017-02-27 23:14 WDZRMPCBIT 阅读(181) 评论(0) 推荐(0)
摘要:题意:给定一张无向图,图中每个边都有a,b两种边权,求一条从S到T的路径,使得路径中(a的最大值+b的最大值)最小 法一:我们先将边按a排序,每次加入一条边,然后将加入的边的两端入队,跑一边SPFA求从1到达每个节点路径上的最长的一条边的长度。这样需要跑M边SPFA,然而有一个优化——我们可以直接将 阅读全文
posted @ 2017-02-27 23:11 WDZRMPCBIT 阅读(188) 评论(0) 推荐(0)
摘要:题意:求一个无向图的最小生成树与次小生成树的边权和是否相等 题解: 首先有一个性质,就是最小生成树上的任意两点的距离就是其在原图中的最短路,严格的证明我不会- -,但是由于Prim Dijkstra算法的过程完全相同,所以这个性质比较显然(不会证就不会证呗为何还要找理由QAQ) 还要一条性质就是无向 阅读全文
posted @ 2017-02-27 23:06 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:求恰好经过K条边的最短路 题解:根据Floyd的性质,如果我拿一开始给出的两个边权矩阵(只经过一条边的最短路的邻接矩阵)跑Floyd,得到的一定是只经过两条边的最短路的邻接矩阵(普通的Floyd是用求出的最短路来更新最短路而非用初始矩阵),同理用两条边的邻接矩阵一定能得到四条边的,因此N条边的 阅读全文
posted @ 2017-02-27 23:04 WDZRMPCBIT 阅读(212) 评论(0) 推荐(0)
摘要:题意:给订一张无向图,求一条S到T的路径,使得路径上的最大边权与最小边权的比值最小 题解:将边由小到大排序,暴力枚举最小边,然后借鉴Kruskal的思想,由小到大加入每一条大于初始边的边,检验S与T是否连通,若连通则更新答案,枚举下一条边。 #include <cstdio> #include <c 阅读全文
posted @ 2017-02-27 23:02 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:给定N个变量和K个约束条件,形如x1==x2,x1-x2≥a……,求$\sum\limits_{i = 1}^N {{x_i}}$的最小值 题解: 首先差分约束系统是指形如:x[i]-x[j]<d[k]的形式的几个方程联立得到的方程组,其中d均为已知量,x均为未知量。(至于等于好嘛……d--不 阅读全文
posted @ 2017-02-27 23:00 WDZRMPCBIT 阅读(182) 评论(0) 推荐(0)
摘要:题意:求每个节点v的$\sum\limits_{s \ne v,t \ne v} {\frac{{{C_{s,t}}(v)}}{{{C_{s,t}}}}}$,其中${C_{s,t}}(v)$为从s到t经过v的最短路的数量,${C_{s,t}}$为s到t的最短路的总数 题解:跑一边Floyd然后枚举判 阅读全文
posted @ 2017-02-27 22:57 WDZRMPCBIT 阅读(164) 评论(0) 推荐(0)
摘要:题意:给定一张图,有可以将K条路径的花费变为0,求从1到N的最短路 题解: 分层图+最短路水过。 我们把原图复制K份,平行的放在一起(就像饼干一样一层层的),然后给每个图编号1 2 3……K,然后对于原图中每一条边(x,y),在i的x和i+1的y之间连一条边权为0的边,然后在这K个图上做最短路即可。 阅读全文
posted @ 2017-02-27 22:52 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:给定一个图,图中有保护关系(u,v)表示到v之前必须先到一次u,求从1到N的最短路 题解: 定义d1[i]为直接到达i的最短距离,这个的更新和普通的Dijkstra一样 定义d2[i]为解除i的所有保护的最短距离(不一定要在i结束),这个更新起来很简单,每经过一个节点就将其所控制的城市的发生器 阅读全文
posted @ 2017-02-27 22:50 WDZRMPCBIT 阅读(153) 评论(0) 推荐(0)
摘要:题意:给定N个正整数ai,求[L,R]中能凑出多少个数 题解: 首先取最小的ai,如果k*ai+x合法,则(k+n)ai+x均合法(其中L<=(k+n)ai+x<=R) 因此对于每一个x,我们只需要求出最小的k,然后就能算出所有的合法解的数量。 至于算k,用最短路就好 #include<map> # 阅读全文
posted @ 2017-02-27 22:48 WDZRMPCBIT 阅读(169) 评论(0) 推荐(0)
摘要:题意:(这题没图不好说……大家还是自己去看吧) 题解: 首先有一点需要注意,就是题面中a和b数组搞混了…… 像势能分析那样,我们每花费一定金额b[i][j]就相当于得到了a[i][j]的势能,这样我们建图,图中每一个点均由花费(边权)、横纵坐标、势能四个量决定,显然转移的时候有: 势能==0:向下一 阅读全文
posted @ 2017-02-27 22:44 WDZRMPCBIT 阅读(198) 评论(0) 推荐(0)
摘要:题意:给定限制条件(a,b)表示a必须在b之前,求所有合法序列中,小的数尽量在前面的方案 题解:首先我们根据限制条件建反向图,然后在反向图上求字典序最小的拓扑序(队列改为堆),逆序输出即可。 #include <queue> #include <functional> #include <cstdi 阅读全文
posted @ 2017-02-27 22:42 WDZRMPCBIT 阅读(181) 评论(0) 推荐(0)
摘要:题意:给定两种限制:1、编号为i的航班必须在ki+1之前起飞 2、(a,b)表示a必须在b之前起飞。求:1、一个合法起飞序列 2、每个航班在所有合法起飞顺序中,最早的起飞时间。问题保证有解 题解:首先按照第二个限制条件建图,那么第一问随便跑一个拓扑序就好,关键在第二问,我们枚举每一个飞机,假定该飞机 阅读全文
posted @ 2017-02-27 22:37 WDZRMPCBIT 阅读(127) 评论(0) 推荐(0)
摘要:题意:给定N个有A C G T组成的字符串,求长度为L的仅由A C G T组成的字符串中有多少个是不含给定的N个字符串的题解: 首先我们把所有的模式串(给定的DNA序列)建Trie,假定我们有一个匹配串,并且在匹配过程到S[i]这个字符时匹配到了Trie上的某个节点t,那么有两种可能: 匹配失败:t 阅读全文
posted @ 2017-02-27 22:28 WDZRMPCBIT 阅读(143) 评论(0) 推荐(0)
摘要:题意:给定三个操作:1、在当前字符串的末尾添加一个字符c 2、在当前字符串的末尾删除一个字符 3、记录当前字符串并对其标号。再给出N组询问,每组询问需回答第x个字符串在第y个字符串中出现的次数 题解: 首先按照如下规则建Trie,设当前节点为t,第i个字符串的结尾在Trie中的位置为mark[i]: 阅读全文
posted @ 2017-02-27 22:24 WDZRMPCBIT 阅读(122) 评论(0) 推荐(0)
摘要:题意:给定N个字符串,设S为N个字符串首尾相连组成的字符串,查询每个字符串在S中出现的次数。 题解: 首先我们在构造Trie的时候,将构造过程中经过的节点的cnt全部++,此时cnt中记录该模式串被多少个模式串包含。 如果A为B的子串,B为C的子串,显然A也是C的子串,因此我们从下往上回溯,每回溯到 阅读全文
posted @ 2017-02-27 22:03 WDZRMPCBIT 阅读(148) 评论(0) 推荐(0)
摘要:题意:给定一个字符串,维护:1、修改某个位置的字符 2、查询从p、q位置开始相同字串的长度 3、在某个位置后面插入一个字符 题解:因为需要支持修改所以很容易想到用平衡树,每个节点维护该节点子树所构成的字串的Hash值,修改和插入不用多说,查询我们二分答案,然后在Splay上查询即可。 #includ 阅读全文
posted @ 2017-02-27 21:58 WDZRMPCBIT 阅读(148) 评论(0) 推荐(0)
摘要:题意:给定N个字符串,求这N个字符串中有几对字符串有且仅有一位不同 题解:首先双哈希存下来,枚举删除哪一位,枚举每一个字符串删除后的哈希值,对哈希值排序之后看有多少个相同的,每组大小为n的相同字符串集对答案的贡献为$C_n^2$ #include <cstdio> #include <cstring 阅读全文
posted @ 2017-02-27 21:50 WDZRMPCBIT 阅读(128) 评论(0) 推荐(0)
摘要:请不要吐槽为什么这么快刷了这么多题……我最近只是在复习以前做过的题,所以把以前的解题报告转移过来QAQ,所以有些图片会有CSDN的水印,毕竟我快要懒死了 这个blog应该长期使用了,欢迎各位神犇莅临指点本蒟蒻。原博客 阅读全文
posted @ 2017-02-27 00:49 WDZRMPCBIT 阅读(127) 评论(0) 推荐(0)
摘要:题意:给定一个字符串,求最短的循环节使之循环后能构成这个字符串 题解: 根据next的性质,如果长度为L的字符串next[L]=i,则S[i+k-1]==S[i-(L-i+1)+k-1],同时我们不断的拆分下去,直到最小的一部分,这最小的一部分一定是和L-i+1到L相同的,也就是说如果最小的那一部分 阅读全文
posted @ 2017-02-27 00:46 WDZRMPCBIT 阅读(172) 评论(0) 推荐(0)
摘要:题意:给定一个字符串,求字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠的最长子串的长度。 题解: 一开始看错题了,以为是求最长的满足要求的前后缀,结果样例都搞不出来,直到看了别人的题解才顿悟QAQ 顿悟就顿悟了,以前写的0角标开始的next数组next[0]= 阅读全文
posted @ 2017-02-27 00:43 WDZRMPCBIT 阅读(173) 评论(0) 推荐(0)
摘要:题意:给定一棵树,求树中长度为三的倍数的路径条数 题解:定义c[i]为一颗子树中每个节点到根的距离%3等于i的路径数量,和poj1741一样,我们只需要找出只在一颗子树中的路径,就是c[1]*c[2]*2+c[0]*c[0] #include <cstdio> #include <cstring> 阅读全文
posted @ 2017-02-27 00:36 WDZRMPCBIT 阅读(132) 评论(0) 推荐(0)
摘要:题意:给定一棵树,求树中长度小于等于K的路径条数。 题解: 分治重在思想,没有固定的算法——对于本题中某一子树上的任意一条路径,其要么是经过该子树的根,要么不经过,不经过的情况分治到子树上,我们只用考虑经过子树的根的情况。 由于经过了根节点,所以该路径的起始点一定是在根节点的两颗子树上,但直接求解方 阅读全文
posted @ 2017-02-27 00:34 WDZRMPCBIT 阅读(141) 评论(0) 推荐(0)
摘要:题意:给定一个数列,每次交换两个数后,输出序列中逆序对的数量。 题解: 比树套树神马的好写了多了,虽然时间理论上应该慢一些,但是绝不会MLE 首先我们离散化,由于交换(x,y)只会对(x,y)之间的数产生影响,因此我们讨论x<i<y a[i]<a[x] --ans a[i]>a[x] ++ans a 阅读全文
posted @ 2017-02-27 00:32 WDZRMPCBIT 阅读(138) 评论(0) 推荐(0)
摘要:题意:给定一个颜色序列,维护:1、单点修改 2、区间查询不同颜色的种数 题解: 定义f[i]为i左边第一个和i颜色相同的位置,用分块来维护f。 询问:看区间中有多少个位置的f[i]<l 更新:暴力枚举p左右最近的与p颜色相同的位置,更新即可 #include <cmath> #include <cs 阅读全文
posted @ 2017-02-27 00:27 WDZRMPCBIT 阅读(177) 评论(0) 推荐(0)
摘要:题意:给定一个数列,维护:1、单点修改 2、查询区间第k大 题解: 找个代码debug网上全是树套树。 然而还是喜欢这么写分块,开个结构体什么的看起来很一目了然不是吗…… 先把每个块排序 修改:二分找到修改的位置在块中的位置,然后移动到修改后应该在的块中的位置。 查询:确定上下界后二分答案,看每个答 阅读全文
posted @ 2017-02-27 00:23 WDZRMPCBIT 阅读(147) 评论(0) 推荐(0)
摘要:题意:给定一个数列,维护:1、[L,R]之间所有的数+=W 2、求[L,R]中大于等于C的数的数量 题解:更新用add标记,头尾俩块暴力重构;查询将每个块排序然后二分找。 #include <cmath> #include <ctime> #include <cstdio> #include <cs 阅读全文
posted @ 2017-02-27 00:21 WDZRMPCBIT 阅读(129) 评论(0) 推荐(0)
摘要:题意:给定N,M,求$\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^M {lcm(i,j)} }$,多组询问 题解: 设$F(x,y) = \sum\limits_{i = 1}^x {\sum\limits_{j = 1,\gcd (i,j) = 1}^y 阅读全文
posted @ 2017-02-27 00:18 WDZRMPCBIT 阅读(191) 评论(0) 推荐(0)
摘要:题意:T组询问,每组询问给出N,M,a,有一张N×m的数表,其第i行第j列(1≤i≤N,1≤j≤M)的数值为能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。 题解: 首先我们预处理出来所有数的约数和,也就是F函数,定义g(i)=1到N和1到M中gcd含有i这个因子的组数,这玩意 阅读全文
posted @ 2017-02-27 00:02 WDZRMPCBIT 阅读(168) 评论(0) 推荐(0)
摘要:题意:求x∈[1,N],y∈[1,M]中gcd(x,y)为质数的数对的数量。 题解: 这个题把BZOJ2301中的k改成枚举素数就能过啦……才怪,不过和那个题的思路类似,但我们不枚举每一个质数,而是直接枚举质数p的倍数T,得到\[{f_{A,B,p}} = \sum\limits_{p|T} {[{ 阅读全文
posted @ 2017-02-26 23:40 WDZRMPCBIT 阅读(135) 评论(0) 推荐(0)
摘要:题意:N组询问,每次给出a b c d k,求满足a≤x≤b,c≤y≤d且gcd(x,y)=k的数对(x,y)的数量。 题解: 设fA,B,k表示1≤x≤A,1≤y≤B内合法数对的数量,那么答案就是fb,d-fa,d-fb,c+fa,c。设FA,B,i=i|gcd(x,y)(i=tk,1≤x≤A,1 阅读全文
posted @ 2017-02-26 22:22 WDZRMPCBIT 阅读(163) 评论(0) 推荐(0)
摘要:题意:求[1,N!]中与M!互质的数的个数对R取余,多组询问,模数相同 题解: 如果a与b互质,显然kb+a依然与b互质,因此答案就是\[\frac{{N!}}{{M!}}\varphi (M!) = N!\prod\limits_{{p_i}|M!} {\frac{1}{{{p_i}}}} \] 阅读全文
posted @ 2017-02-26 21:47 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:分别求所有质因数都不同且质因数个数为奇数个、偶数个的数的欧拉函数和,和质因数存在重复的数的欧拉函数和 题解: 说书题……前面一大串就是用一种比较有趣的语言定义欧拉函数。 显然我们只需要求出所有军人ans1和政客ans2,然后用求得的M减去独立数和就是学者的独立数和了。 由于善良的出题人已经帮我 阅读全文
posted @ 2017-02-26 15:25 WDZRMPCBIT 阅读(172) 评论(0) 推荐(0)
摘要:题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 题解:我们枚举素数p,后面的过程和BZOJ2705一样,不同的是我们限制x>=y,假定得到的答案是ans,那么实际上答案是2*ans-1(加上x<=y,x==y重复计算了) #include <cmath> # 阅读全文
posted @ 2017-02-26 15:21 WDZRMPCBIT 阅读(158) 评论(0) 推荐(0)
摘要:题意:求$\sum\limits_{i = 1}^N {\gcd (i,N)}$ 题解: 枚举gcd,那么仅当一个数a与N/i互质时,gcd(a*i,N)==i,这样的数有phi(N/i)个。 由于我们在计算gcd=i时,顺便可以算出gcd=N/i的答案,因此只需要枚举sqrt(N)个数即可。 #i 阅读全文
posted @ 2017-02-26 15:20 WDZRMPCBIT 阅读(106) 评论(0) 推荐(0)
摘要:题意:求[a,b]中含有6 8或因子含有6 8的数的个数 题解: 我们用容斥的思想,先求出1->b的方案数,再减去1->a-1的方案数 首先我们一遍DFS求出所有由6和8组成的数的数量 然后将搜索得到的所有数排序,如果存在a%b==0,那就把a给删了(打个标记)。 由于得到的数非常少,所以我们可以枚 阅读全文
posted @ 2017-02-26 15:16 WDZRMPCBIT 阅读(177) 评论(0) 推荐(0)
摘要:题意:求$\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^M {f(i,j)} } $,其中f(i,j)=(0,0)与(i,j)连线上点的数量 题解: 如果一个点(x',y')在(0,0)与(x,y)的连线上,则有gcd(x',y')==gcd(x,y)。因此f 阅读全文
posted @ 2017-02-26 15:13 WDZRMPCBIT 阅读(161) 评论(0) 推荐(0)
摘要:题意:给1到n的一个排列,按照某种顺序依次删除m个元素,每次删除一个元素之前统计整个序列的逆序对数。 题解: 离线倒着做,每次加入一个节点后新增的逆序对数量就是其左边大于它的数的个数(左边数的总数-左边小于它的数的个数)+右边小于它的数的个数 用树状数组维护求和,对于树状数组中每个节点v所对应的区间 阅读全文
posted @ 2017-02-26 14:05 WDZRMPCBIT 阅读(137) 评论(0) 推荐(0)
摘要:题意:给定一个数列,维护:1、在a和b之间插入c 2、询问[a,b]中的第c大 题解: 权值线段树套区间线段树 外层的权值线段树中每个节点如果维护[L,R]这个区间,那么该节点所对应的线段树维护的就是[L,R]这些数在每个区间里出现了几次,也就是说如果外层线段树的某个节点维护[L,R],其所对应的内 阅读全文
posted @ 2017-02-26 14:02 WDZRMPCBIT 阅读(121) 评论(0) 推荐(0)
摘要:题意:初始时给定一个没有边的图,维护:1、添加一条边 2、修改单点权 3、询问u到v的点权和 题解:因为只有加边的操作,所以可以用LCT来维护,剩下的就是裸的操作了。 #include <cstdio> #include <cstring> #include <cstdlib> #include < 阅读全文
posted @ 2017-02-26 14:00 WDZRMPCBIT 阅读(114) 评论(0) 推荐(0)
摘要:题意:给定一棵树,维护:1、删除一条边 2、添加一条边 3、询问u和v是否连通 题解:LCT维护连通性 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> u 阅读全文
posted @ 2017-02-26 13:56 WDZRMPCBIT 阅读(145) 评论(0) 推荐(0)
摘要:题意:给定一个长度为N的数列,每个元素有一个权值w[i],表示从i出发能到i+w[i],如果结果大于N则结束,维护:1、从i出发能转移多少次 2、修改w[i] 题解:建树,在i(儿子)和i+w[i](父亲)之间连边,大于N直接连到虚根上,每次询问直接查找i到根节点路径上的点数。因为边的连接情况是动态 阅读全文
posted @ 2017-02-26 13:53 WDZRMPCBIT 阅读(106) 评论(0) 推荐(0)
摘要:题意:给定一个树,维护:1、u到v是否有必胜策略 2、将u的权值修改为w 题解:BFS版的树链剖分 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> usi 阅读全文
posted @ 2017-02-26 13:48 WDZRMPCBIT 阅读(130) 评论(0) 推荐(0)
摘要:题意:给定一棵树,每次询问给出l r z,求在[l,r]区间内的每个节点i与z的最近公共祖先的深度之和 题解: 显然,暴力求解的复杂度是无法承受的。 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是 阅读全文
posted @ 2017-02-26 13:42 WDZRMPCBIT 阅读(116) 评论(0) 推荐(0)
摘要:题意:给定一棵树,维护:1、将u的种类改为c 2、将u的权值改为w 3、求u到v路径上种类为c的点的点权和 4、求u到v路径上种类为c的点的最大点权 题解:每个宗教建一颗线段树,然后随便做……考虑到如果把每一棵线段树都建完全会MLE,所以我们开动态内存。因为给出的评级都是正整数,所以如果一个区间的和 阅读全文
posted @ 2017-02-26 13:36 WDZRMPCBIT 阅读(152) 评论(0) 推荐(0)
摘要:题意:给定一棵树,维护:1、将a到b路径上所有的点染为c 2、求a到b路径上颜色段的数量。 题解:区间颜色段数=左区间颜色段数+右区间颜色段数-(左区间最右边的颜色==右区间最左边的颜色),用线段树来维护。 #include <cstdio> #include <cstring> #include 阅读全文
posted @ 2017-02-26 13:32 WDZRMPCBIT 阅读(98) 评论(0) 推荐(0)
摘要:题意:给定一棵树,维护:1、将u的权值修改为v 2、求u到v路径上的最大权 3、求u到v路径上的点权和 题解:树链剖分裸题 #include <cstdio> #include <climits> #include <cstring> #include <cstdlib> #include <ios 阅读全文
posted @ 2017-02-26 13:24 WDZRMPCBIT 阅读(169) 评论(0) 推荐(0)
摘要:题意: 给定N个操作,每种操作的格式为: 1、+a:表示将当前的结果加上a 2、-a:表示将当前的结果减去a 3、*a:表示将当前的结果乘以a 4、@a:表示将当前的结果加上a*X(X是一开始JYY输入的数) 在操作中,如果结果>R,则结果=R;如果结果<L,则结果=L。给定M个xi,求每个x在经过 阅读全文
posted @ 2017-02-26 13:20 WDZRMPCBIT 阅读(243) 评论(0) 推荐(0)
摘要:题意:给定一棵树,维护:1、一个节点+x 2、一个子树所有节点+x 3、求x到根的路径和 题解:先跑出DFS序,那么一个节点的子树就是这个节点在DFS序中两次出现之间的节点,设s[i],e[i]为i第一次出现和第二次出现的位置,用线段树来维护求和,借鉴差分的思想,那么线段树中s[i]所对应的节点的权 阅读全文
posted @ 2017-02-26 13:13 WDZRMPCBIT 阅读(162) 评论(0) 推荐(0)
摘要:题意:给定N个矩形,求复数个矩形所覆盖的面积和 题解: 首先我们离散化,然后按照纵坐标从下往上扫,每扫到一条边,就把这条边的边权压入线段树——规定始边边权为1,终边边权为-1 每次从下往上枚举一条边,将每两个坐标之间的间隔看成是一个点,每次枚举看那个间隔权值>1,统计下来,乘以两条边之间的距离。 当 阅读全文
posted @ 2017-02-26 13:06 WDZRMPCBIT 阅读(239) 评论(0) 推荐(0)
摘要:题意:给定N个初始长度均为0,坐标为1-N的向y轴正坐标延伸的线段。给定M个操作,每个操作将横坐标为x的线段长度变为y,求每次操作以后(0,0)与(i,yi)的连线不被其他线段所阻挡的线段的数量。 题解:显然对于所有不被阻挡的线段,其斜率一定是单调递增的,由于每次修改只会影响到后面的线段能不能看到( 阅读全文
posted @ 2017-02-26 13:04 WDZRMPCBIT 阅读(109) 评论(0) 推荐(0)
摘要:题意:给定一个由(,)组成的括号序列,维护:1、将[a,b]修改为同一种半括号 2、将[a,b]翻转 3、将[a,b]的(变为),)变为( 4、求[a,b]最少要添加多少个括号才能合法 题解: 不算太裸的平衡树……论标记的正确打法。 对于一个括号序列,我们总能简化成一个左边全是右括号,右边全是左括号 阅读全文
posted @ 2017-02-26 12:50 WDZRMPCBIT 阅读(186) 评论(0) 推荐(0)
摘要:题意:给定一个数列,要求维护:1、在p之后加入tot个数 2、删除p之后tot个数 3、将p之后tot个数修改为c 4、翻转p之后tot个数 5、输出p之后tot个数的和 6、输出整个数列的最大子段和。 题解:平衡树很经典的题目了……主要说一下4和6操作,4的话因为翻转操作是可以分治的,所以可以用翻 阅读全文
posted @ 2017-02-26 12:44 WDZRMPCBIT 阅读(252) 评论(1) 推荐(0)
摘要:题意:开始时给定一个空的数列,要求维护:1、加入一个数 2、数列中所有元素+k 3、数列中所有元素-k 4、查询数列中的第k大。其中对于任意时刻,如果有一个元素<Min,则删除该元素。 题解:平衡树裸题……话说当年还打算把Splay Treap SBT都学一下,结果现在只会Splay了QAQ #in 阅读全文
posted @ 2017-02-26 12:37 WDZRMPCBIT 阅读(141) 评论(0) 推荐(0)
摘要:题意:给定y z p,求:1、yzmod p 2、y-1z mod p 3、yx≡z(mod p)的x 题解:题意即题解 #include <map> #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> # 阅读全文
posted @ 2017-02-26 12:32 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:${x_{i + 1}} = (a{x_i} + b)\bmod p$,求最小的n使xn=t,无解输出-1,保证p为质数。 题解: 学好数理化,走遍天下都不怕 显然有\[{x_n} = {a^{n - 1}}{x_1} + b\sum\limits_{i = 0}^{n - 2} {{a^i} 阅读全文
posted @ 2017-02-26 12:28 WDZRMPCBIT 阅读(153) 评论(0) 推荐(0)
摘要:题意:求${G^{\sum\limits_{d|N} {C_N^d} }}\bmod P$ 题解: 设\[A = \sum\limits_{d|N} {C_N^d} = A\bmod (P - 1) + k(P - 1)\]由费马小定理,G^A可以直接把k(P-1)省略掉,因此问题变成求G^[A%( 阅读全文
posted @ 2017-02-26 12:18 WDZRMPCBIT 阅读(110) 评论(0) 推荐(0)
摘要:题意:给定一颗树,维护:1、给定一个节点,求该节点到根的路径上总点数-点权和,并将路径上的所有点的权值赋为1 2、给定一个节点,求该节点子树的点权和,并将子树中所有点的权值赋为0 题解:链剖裸题 #include <cstdio> #include <cstring> #include <cstdl 阅读全文
posted @ 2017-02-26 11:35 WDZRMPCBIT 阅读(93) 评论(0) 推荐(0)
摘要:题意:给定一张有N个点的有向图,求0到N-1长度为T的路径的总条数。 题解:把长度为K的边拆成K条长度为1的边,然后建出邻接矩阵快速幂裸上。 #include <cstdio> #include <cstring> #include <cstdlib> #include <climits> #inc 阅读全文
posted @ 2017-02-26 11:24 WDZRMPCBIT 阅读(117) 评论(0) 推荐(0)
摘要:题意:求12345……101112……(N-1)N mod M的值(被模数就是1-N顺次连接起来)。 题解:丧病的数学老师,看自己写的题解都看不懂了QAQ,首先设${f_i}$=前i个数连接起来 mod M的值,然后按位数不断转移,也就是说,假定当前要增加的数i最高位是10^k,那么\[{f_i} 阅读全文
posted @ 2017-02-26 11:21 WDZRMPCBIT 阅读(137) 评论(0) 推荐(0)
摘要:题意:给定一个K个N元mod 2方程,若有解,求用前几个方程即可出解和各个变量为奇数还是偶数,若无解输出:Cannot Determine题解:有关01异或方程的解法可以看莫涛的论文。这个题就可以看作是异或方程——虽然是加法,不过只考虑二进制最后一位的话和异或是一样的。 #include <bits 阅读全文
posted @ 2017-02-26 11:05 WDZRMPCBIT 阅读(160) 评论(0) 推荐(0)
摘要:题意:给定3*M+1张写有数字1到N的牌,求添加一个数字,使得所有的牌在删除两个数字相同的牌后,能够分成M组,其中每一组要么由相同的数字组成,要么由连续的数字组成。N≤400,M≤1000题解:暴力枚举加哪张牌,然后暴力枚举删哪两张牌,然后枚举判定是否合法。每次判定时先删除相同数字,后删除连续数字, 阅读全文
posted @ 2017-02-26 10:56 WDZRMPCBIT 阅读(184) 评论(0) 推荐(0)
摘要:题意:A与B博弈,有N个装有豆子的瓶子,每次选择i<j<=k三个瓶子,其中第i个瓶子里一定有豆子,从i中取出一个豆子,然后在j,k中各放入一个豆子,不能操作者为负,求胜者和第一步的决策。 题解:将每个石子看成一堆石子,对初始状态的SG有贡献的石子堆的石子数一定为奇数,这样先手是否必胜就解决了。因此我 阅读全文
posted @ 2017-02-26 02:54 WDZRMPCBIT 阅读(134) 评论(0) 推荐(0)
摘要:题意:在一个桌子边缘摆完全相同的长度为M的N本书(方块),只要重心投影在桌子上就算合法,求最远可以向外延伸的距离。 题解:最后放置的书需要补偿之前所有的书向外延伸导致的重心外移,因此重心投影在桌子上的书的重心应与其他的书的整体重心与桌子边缘的偏移距离相同。因而第i本书的延伸长度应为1/2i(证明可以 阅读全文
posted @ 2017-02-26 02:45 WDZRMPCBIT 阅读(182) 评论(0) 推荐(0)
摘要:题意:给定一张无向图,求1到N异或和最大的路径,允许重复经过。 题解:首先跑出1到N的一条路径,答案就是在这条路径上不断加环。首先用DFS处理出所有基环的异或和(其他环一定由基环构成,重复部分异或之后就会消掉),然后就是从一堆数里选任意个数使得异或和最小了,怎么做可以去看莫涛的课件(同解01异或方程 阅读全文
posted @ 2017-02-26 02:43 WDZRMPCBIT 阅读(118) 评论(0) 推荐(0)
摘要:题意:给定N维球面上的N+1个点,求这个球的球心。 题解:无意中翻到的一道裸题,顺手做了。首先考虑一个比较简单的二维情况,对于两个点(x1,y1),(x2,y2),据题意可以得到 推广一下有 \[\sum\limits_{i = 1}^N {2({d_{a,i}} - {d_{b,i}}){x_i} 阅读全文
posted @ 2017-02-26 02:42 WDZRMPCBIT 阅读(146) 评论(0) 推荐(0)
摘要:题意:给定M个志愿者和工作时间的长度N,每个志愿者由工作时间[l,r]和费用c来描述,每个单位时间需要t名志愿者,保证有解,求最少总花费。 题解:这个题标算貌似是费用流啊,不太清楚……总而言之设x[i]为i这个人要不要,b[i]为各个时间所需的志愿者数量,a[i][j]为i时间j这名志愿者能不能起作 阅读全文
posted @ 2017-02-26 02:39 WDZRMPCBIT 阅读(132) 评论(0) 推荐(0)
摘要:题意:给定E s v' k,求v最小化$\sum\limits_{i = 1}^N {\frac{{{s_i}}}{{{v_i}}}}$,要求$\sum\limits_{i = 1}^N {{k_i}{s_i}{{\left( {{v_i} - v_i^'} \right)}^2}} \le E$ 阅读全文
posted @ 2017-02-26 02:31 WDZRMPCBIT 阅读(280) 评论(0) 推荐(0)
摘要:题意:给定一个N*M的网格,求有多少个不同的三角形,顶点在交点上。 题解:首先找出所有三个点的组合,然后删除同行,同列,同对角线(横纵坐标的gcd相同) #include <cstdio> #include <cstring> #include <cstdlib> #include <iostrea 阅读全文
posted @ 2017-02-26 02:10 WDZRMPCBIT 阅读(134) 评论(0) 推荐(0)
摘要:题意:给定一个轮状结构(中间一个点,周围有N个点以环状围住这个点),从不相交的2*N-1条边中选N条边,使任意两点间有且只有一条联通路径。 题解:请点这里。然而如果考场上考到直接打表找规律好了 #include <cstdio> #include <cstring> #include <cstdli 阅读全文
posted @ 2017-02-26 02:08 WDZRMPCBIT 阅读(134) 评论(0) 推荐(0)
摘要:题意:给定N条直线,求由这N条直线组成的,满足上方没有直线交点的边界由哪些直线组成 题解:我这STL用的真是闷声做大死,多亏不卡常……显然所求的边界中的直线k肯定单调的,所以首先将直线按k升序(第一关键字),b降序(第二关键字)进行排序。然后枚举每一条直线,用单调栈s维护这个直线集,若堆顶元素s[0 阅读全文
posted @ 2017-02-26 02:07 WDZRMPCBIT 阅读(152) 评论(0) 推荐(0)
摘要:题意:监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 题解:设f[i]=有M种宗教i个房间时不发生越狱的方案数,显然f[1]=M,f[i]=f[i-1]*(M-1)。最后答案就 阅读全文
posted @ 2017-02-26 02:03 WDZRMPCBIT 阅读(132) 评论(0) 推荐(0)
摘要:题意:给定一个长度为M的字符串A,求长度为N的字符串中,子串中不包含A的字符串的数量,其中字符串仅由‘0’-‘9’组成。 题解:设f[i][j]=长度为i最后几位能匹配A的前j个字符的字符串种数,那么每往后添加一个字符,能转移到的位置通过KMP的Next数组很轻松就能找到。那么我们就能构造出来一个矩 阅读全文
posted @ 2017-02-26 02:02 WDZRMPCBIT 阅读(152) 评论(0) 推荐(0)
摘要:题意:直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量。请计算每颗行星的受力,只要结果的相对误差不超过5%即可. 题解:出题人脑子有坑系列。完全没见过这么扯的题目,因为${F_j} = \ 阅读全文
posted @ 2017-02-26 01:59 WDZRMPCBIT 阅读(133) 评论(0) 推荐(0)
摘要:题意:给定一个数列,要求维护:1、求倒数L个数中的最大值 2、在数列末尾插入(最近的1询问的答案+x)%D。其中初始序列为空。 法一:因为询问最多200000个,所以直接建一棵大小为M的线段树维护即可 #include <cstdio> #include <cstring> #include <cs 阅读全文
posted @ 2017-02-26 01:52 WDZRMPCBIT 阅读(134) 评论(0) 推荐(0)
摘要:题意:给定一张无向图,不断从图上删点,询问每次删点后联通块的数量 题解:离线,在删完点后的图上不断加点,用并查集维护联通性。 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <a 阅读全文
posted @ 2017-02-26 01:48 WDZRMPCBIT 阅读(187) 评论(0) 推荐(0)
摘要:题意:求最小生成树的方案数,保证每个边权出现的次数小于十次。 题解:首先我们需要知道:一张图对于一个确定的边权,在任意最小生成树中出现的次数是相同的(请不要问我为什么QAQ)。所以我们先求出每一种边权在MST中出现的次数,然后枚举每一个边权,暴力看取哪些边可以组出一颗MST,复杂度O(M*2^10* 阅读全文
posted @ 2017-02-26 01:17 WDZRMPCBIT 阅读(175) 评论(0) 推荐(0)
摘要:题意:给定一个X*Y的长方形,每次可以平行长或宽切一刀,求切N-1次能得到的最小的N个子长方形中长宽比最大的值。 题解:因为N<=10,DFS乱搞就好 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream 阅读全文
posted @ 2017-02-26 01:09 WDZRMPCBIT 阅读(142) 评论(0) 推荐(0)
摘要:题意:求[A,B]之间,任意相邻两位差值均大于等于2的数的个数题解:设f[i][j]=第i位为j的合法的数的数量,显然有f[i][j]=f[i-1][k],|k-j|≥2。至于统计答案,我们只要能求1-U之间的合法的数的数量,显然答案就是Ans[B]-Ans[A-1]。至于Ans[i]……因为Ans 阅读全文
posted @ 2017-02-26 01:00 WDZRMPCBIT 阅读(154) 评论(0) 推荐(0)
摘要:题意:给定M个A物品和N个B物品,每个物品有x y z三个属性。求选择最少的B物品(每种物品的量是无限的,但不可拆分),使得可以组合出所有A物品,无解输出-1. 题解:题解在这里,有几个特殊情况需要判断……首先是所有金属在一条线上,其次是所有客户的金属在一条线段上。当然我是没判的,毕竟数据太弱了QA 阅读全文
posted @ 2017-02-26 00:54 WDZRMPCBIT 阅读(137) 评论(0) 推荐(0)
摘要:题意:给定汉诺塔移动的优先级(由大到小且两次操作不移动同一个盘子,则能执行的一定执行)和盘子的数量,求移动次数。 题解:设f[i][j]=将i柱子上j个盘子移动到满足要求的柱子上的步数,g[i][j]=移走i柱子上j个盘子按要求会移动到g[i][j]这个柱子。有两种转移的情况 (以下1 2 3仅作代 阅读全文
posted @ 2017-02-26 00:48 WDZRMPCBIT 阅读(129) 评论(0) 推荐(0)
摘要:题意:给定N个建筑,每个建筑有一个修理时间t1和报废时间t2,每个时刻只能修理一个建筑,求最多可以修理的建筑数 题解:首先将所有建筑按报废时间排序,由小到大枚举,用t1来维护堆,假如已经花费的时间+当前建筑的修理时间<当前建筑的报废时间,当前建筑入堆;否则,假如当前建筑的修理时间比堆顶元素小,并且删 阅读全文
posted @ 2017-02-26 00:44 WDZRMPCBIT 阅读(145) 评论(0) 推荐(0)
摘要:题意:给定两个数列a b,求两数列怎样排列能使a个数列中:2*(a[i]>b[i]的数量)+(a[i]=b[i]的数量)最大和最小。 题解:将两数组排序后,按如下流程贪心:(1)如果a最弱的人强于b最弱的人,两者相赛 (2)否则,如果a最强的人强于b最强的人呢,两者相赛 (3)否则,用a最弱的人与b 阅读全文
posted @ 2017-02-25 21:45 WDZRMPCBIT 阅读(159) 评论(0) 推荐(0)