自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 欢迎访问zjunzhao的博客

大家好,我是zjz,这是我的博客。        我会在这个博客里发表一些文章,内容包括        1.算法竞赛题的题解        2.acm算法总结        3.日记        我会尽量用清晰简洁的语言来描述题目的解答过程与算法。如果您觉得我的文章有写的不好的地方,可以在评论中提出,我将尽快处理。

2017-04-01 21:57:58 452

原创 【题解】AtCoder Grand Contest 016

A:Shrinking题意:规定一种对字符串的操作:设字符串长度为N,一次操作之后可以得到一个长度为N-1的字符串,新字符串的第i个字符等于旧字符串的第i个字符或第i+1个字符。给定一个长度为n的字符串,问最少进行几次操作可以得到一个只含有一种字符的字符串。分析:假如我们要将字符串最终变为"aa...a",首先原字符串中必须得有字符a。设原字符串中字符a的位置从小到大依次为x1,x2,..

2017-06-20 13:57:20 957

原创 【题解】codeforces792E Colored Balls

题目链接题意:给定n个正整数a[1],...,a[n],现在要将每个正整数拆成若干个小正整数的和,使得任意2个小正整数的差不超过1(即取一个正整数k,将a[1],...,a[n]拆成若干个k 与 若干个k+1)。求使得小正整数总数最少的方案,输出该方案下的小正整数总数。分析:假如我们知道最优的情况下小正整数的值应为k和k+1,那么我们很容易在O(n)的时间复杂度内求出这种情况下拆分得到的最

2017-04-03 18:08:49 603

原创 【题解】codeforces786C Till I Collapse

题目链接题意:给定一个长度为n的数组(数组元素∈{1,2,...,n}),对k∈{1,2,…,n},求最小的ans[k],使得数组可以分为连续的ans[k]段,每段内不相同的元素个数都不超过k。分析:为了使ans[k]最小,我们可以贪心地来分段,即对起点l,取最大的r,使得a[l],...,a[r]中不相同的元素个数不超过k。可以来估计一下总段数(即ans[1]+...+ans[n])的上

2017-04-01 21:37:04 914

原创 【题解】codeforces786B Legacy

题目链接题意:给定一个n个点m条带权值的“边”的有向图,其中“边”分为3类。第1类“边”是点u到点v的边,第2类“边”是点u到区间[l,r]中的点的边(即r-l+1条边),第3类“边”是区间[l,r]中的点到点u的边。求以点s为源点的最短路。分析:和atcoder2336类似。考虑给图加一些辅助点和边。对第2类“边”按如下方式处理:对点集[1,n]建立一棵线段树,线段[l,r]维护dis[

2017-03-31 22:04:28 1156

原创 【题解】codeforces786A Berzerk

题目链接题意:n个点围成一个圈,按顺时针编号为1~n。在某个点上会有一个物品C,初始位置范围是2~n。2个人A、B进行博弈,每个人都有一个数集,数集内的数x满足1≤x≤n-1。A、B轮流进行操作,每轮的操作者可以从自己的数集中选出一个数x,然后把物品C顺时针向后移动x个点。先把物品C移动到点1的人获胜。A、B都采取最优策略使得自己胜利,若无法胜利就采取最优策略使自己不败(即平局)。问A、B分别

2017-03-30 18:12:27 894

原创 【题解】codeforces741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

题目链接题意:给定一棵有根树,结点编号为1~n,根结点为结点1。每条边上有一个字母,求各子树内最长的满足“路径上的字母经过重排后可以构成回文串”的简单路径。分析:对结点u,用2进制数vec[u]表示结点u到根结点的路径上各字母的数目的奇偶性。若第i个字母数目为奇数则vec[u]的第i位为1,否则为0。子树u内满足要求的路径可以分成两类,一类经过结点u,一类不经过结点u。由于不经过结点u的路

2017-03-29 18:53:31 1257

原创 【算法】树上启发式合并算法

树上启发式合并算法是启发式合并算法在树上的应用。下面我直接通过一个例子来讲解这个算法。        例:给定一棵有根树,树的结点编号为1~n,根结点为结点1。结点i有颜色col[i],其中1≤col[i]≤n。要求回答m个询问,每个询问回答颜色c在子树u中出现多少次。        显然要将查询离线处理,即对子树u的查询都“挂”到结点u上。我们用cnt[c]表示颜色c出现的次数,那么一种

2017-03-25 17:22:50 6530

原创 【算法】一种字符串匹配算法:z-algorithm

z-algorithm是一种字符串匹配算法,能够实现功能:对字符串S,O(n)地求出S的全体后缀与S自身的最长公共前缀的长度,记录在数组z[]中(z[i]即suffix i与S的最长公共前缀的长度)。         一、算法原理与实现        约定:        字符串S的下标从0开始;        S[i...j]代表字符串S[i]S[i+1]...S[j]; 

2017-03-23 20:01:14 4379

原创 【题解】dutoj1081 Prufer 序列

题目链接题意:略(原题的描述已经很简练了)。分析:首先需要知道的是一个prufer序列和一棵标号树是一一对应的,所以不会有S=0的情况。一个标号在prufer序列中没出现,当且仅当该标号对应的点在prufer序列对应的树中为叶结点。对图G,设其不同的生成树有cnt棵,令ans=cnt*n*(n+1)/2。考虑点u对ans的负贡献,即计算以u为叶结点的生成树的个数,设为cntu,则ans=a

2017-03-09 20:58:38 547

原创 【题解】dutoj1082 埃蒙的时空航道

题目链接题意:略(原题的描述已经很简练了)。分析:可以想到这样一个网络流模型:对星球i,源点s连边至点i,容量为pi,点i连边至汇点t,容量为si,点i连边至点i+1、...、点n,容量均为c。则最大流即为答案。由于n的规模比较大,所以直接求解这个网络流模型是不现实的。考虑该最大流模型的最小割模型,由于问题比较特殊,所以可以贪心求解。每个st-割都会将点集分成2个不相交的集合,一个集合含源

2017-03-09 20:29:23 499

原创 【题解】codeforces778C Peterson Polyglot

题目链接题意:给定一棵trie树,可以删除一层边,再将父边被删且父亲相同的结点对应的子树合并得到一棵新trie树,求新trie树的最小结点数。分析:启发式合并。在合并结点u的子树时,选择将小子树合并到大子树里,这样总的合并的时间复杂度是O(nlgn)的。        证明:合并的耗时来自于对小子树的遍历。设全体小子树的遍历总量为T,考虑每个结点u对T的贡献。设结点u可以作为小子树的第

2017-03-06 22:36:13 956

原创 【题解】codeforces776G Sherlock and the Encrypted Data

题目链接题意:设x的16进制表示为xn-1xn-2...x1x0,定义h(x)=2^xn-1 or 2^xn-2 or...or 2^x1 or 2^x0。求l,l+1,...,r中满足x xor h(x)分析:可以发现x xor h(x)        用calc(m)计算1,2,...,m中满足x^h(x)        从高至底逐位扫描m的16进制表示,并统计答案。扫描至第k

2017-03-01 21:05:57 773

原创 【题解】codeforces765F Souvenirs

题目链接题意:给定一个长度为n的数组与m个查询。第i个查询要求输出数组下标区间[li,ri]内的数之间的距离(差的绝对值)的最小值。分析:离线处理查询。将查询区间按右端点从小到大排序,维护一个数据结构,使得将数组元素a1,a2,...,ai插入到数据结构之后能够快速查询以ai为右端点的查询区间的答案。考虑ai对查询区间的贡献,设d=|ai-aj|(j        若暴力处理ai对查询

2017-02-27 11:40:53 597

原创 【题解】codeforces776E The Holmes Children

题目链接题意:定义函数f(n),f(1)=1,f(n)=|{(x,y)|x+y=n,x≥1,y≥1,gcd(x,y)=1}|(n>1)。定义函数g(n),g(n)=Σf(n/d)(求和对n的全体约数d进行)。递归地定义函数F_k(n),F_1(n)=f(g(n)),F_k(n)=g(F_k-1(n))(k>1且k为偶数),F_k(n)=f(F_k-1(n))(k>1且k为奇数)。求F_k(n)

2017-02-24 22:50:00 382

原创 【题解】codeforces776D The Door Problem

题目链接题意:有n扇门,每扇门的状态为开(0)或闭(1)。有m种操作,每种操作可以改变若干扇门的状态。每扇门恰好可以被两种不同的操作改变状态。给出n扇门的初始状态,问是否可以经过操作把所有的门的状态都改为闭?分析:设可改变第i扇门的2个操作为ai和bi。若第i扇门的状态为开,则ai和bi操作恰好只能执行一个;若第i扇门的状态为闭,则ai和bi操作要么都不执行要么都执行。由此原问题转化为2-

2017-02-24 22:39:39 536

原创 【题解】atcoder2336 Flags

题目链接题意:给定n个数对(xi,yi),从每个数对中选出一个数,使得得到的n个数之间的最小距离最大。求最大的最小距离。分析:二分最大的最小距离mid。当选出某个数x后,对于数对(xi,yi),若|x-xi|代码#includeusing namespace std;const int maxn=4e5;struct node{ int x,i; bool operat

2017-02-19 23:31:41 529

原创 【题解】atcoder2234 Menagerie

题目链接题意:有n只动物围成一个圈,每只动物要么是羊要么是狼,羊总说真话,狼总说假话。给定一个字符串P,字符串的第i个字符为'o'代表第i只动物认为与它相邻的2只动物是同类,字符串的第i个字符为'x'代表第i只动物认为与它相邻的2只动物是异类。问是否存在一种动物的排列方案使得以上假设成立(羊总说真话,狼总说假话),若存在,给出一种方案。分析:可以发现,当第1只与第2只动物的类别确定之后,就

2017-02-18 22:27:57 531

原创 【题解】玲珑学院oj1092 Fate Dog

题目链接题意:给定n个元素,第i个元素有属性a[i],b[i],c[i],p[i]。求满足(a[i]+b[j]+c[k])(1+p[i]/100)≥H的有序点对(i,j,k)(i、j、k互不相等)的数目。分析:不等式(a[i]+b[j]+c[k])(1+p[i]/100)≥H可变形为b[j]+c[k]≥100*H/(100+p[i])-a[i],故可枚举i,对每个i求满足b[j]+c[k]

2017-02-18 15:36:03 791

原创 【题解】玲珑学院oj1087 Alice and Bob

题目链接题意:给定一棵满二叉树,每个点有一个权值。两人轮流操作,每次操作可以选一个点u,将点u的权值减小x,0分析:将叶子节点所在的层定义为第1层,向上层数递增。        记sg为奇数层节点权值的异或和。则先手必胜当且仅当sg≠0。        证明思路:1.sg≠0的状态可经过一次操作到达sg=0的状态。                            2.sg

2017-02-14 21:36:18 501

原创 【题解】玲珑学院oj1088 Red Packets

题目链接题意:给定n个元素,每个元素有费用a和价值b两个属性。可以从n个元素中选取连续的若干个,满足这连续的若干个元素中除去至多m个元素之外的其他元素的费用和不超过k, 这么做可以获得的价值定义为这连续的若干个元素的价值和。求能够获得的最大价值。分析:滑动窗口。设选取的元素下标集为区间[l,r],只需对每个l求出最大的满足条件的r即可。用两个堆维护判断,一个小根堆用于存储不需要付费的元素,

2017-02-13 22:28:17 431

原创 【题解】玲珑学院oj1089 Place the Tiles

题目链接题意:用1×2的骨牌来铺带障碍格的矩形网格,使得每个网格至多被一张骨牌覆盖且无法再加入骨牌(即没有相邻的未覆盖无障碍网格)。求需要的最少骨牌数。分析:轮廓线dp。每个格子的状态用一个4进制数来表示,0代表未覆盖,1代表已覆盖且由骨牌右端或下端覆盖,2代表已覆盖且由骨牌左端覆盖,3代表已覆盖且由骨牌上端覆盖。转移按如下分类进行:        1.障碍格:将当前格状态改成1

2017-02-13 18:57:25 310

原创 【题解】codeforces441E Valera and Number

题目链接题意:给定整数x、k和概率值p,对x进行k次随机操作,每次操作有p概率对x乘2,有1-p概率对x加1。求操作结束后,得到的数的二进制表示末尾的连续的0的数目的期望。分析:设f[i][S][k]为第i次操作后得到的数的二进制0~8位为S且第8位起向后与第8位相等的数位数为k的概率。转移枚举第i次状态为(S,k)时的操作,计算对第i+1次状态为(newS,newk)的贡献即可。代码

2017-02-10 16:35:17 578

原创 【题解】atcoder2304 Cleaning

题目链接题意:给定一棵带点权的树,允许进行如下操作:选取2个不同的叶子u、v,将u到v的路径所经过的点的点权减1。问能否经过有限次操作使得全体点权变为0。分析:取一非叶结点作为树的根。设结点u的点权为a[u],结点u的经过父节点的点权为b[u](即从子树u某个叶结点出发,经过u的父节点的路径数)。        对任意非叶结点u,设u的儿子的b之和为sum,设x为经过u且在子树u中的路

2017-02-09 16:35:20 675

原创 【题解】atcoder2303 Boxes

题目链接题意:给定n个非负整数a1,a2,...,an,进行操作。每次操作可以选定一个位置i,然后将a(i+j)减去j(当i+j>n时将a(i+j-n)减去j)。问能否经过有限次操作把所有数都变成0。分析:设对位置i操作了xi次,则可以得到如下方程组        n*x1+(n-1)*x2+(n-2)*x3+...+1*xn=a1        1*x1+n*x2+(n-1)*x

2017-02-09 09:26:18 759

原创 【题解】codeforces766D Mahmoud and a Dictionary

题目链接题意:有n个单词,给定m个关系,每个关系要么表示单词a与单词b相同,要么表示单词a与单词b相反。并且“相同”与“相反”有性质:若a与b相同,b与c相同,则a与c相同(从而单词的相同关系是等价关系);若a与b相反,b与c相反,则a与c相同。按顺序判断这m个关系是否可以成立,若可以成立,则加上这个关系,否则忽略。再给定q个询问,每个询问 查询单词a与单词b的关系(相同、相反或未知)。分

2017-02-08 16:41:45 953

原创 【题解】codeforces766E Mahmoud and a xor trip

题目链接题意:给定一棵树,树的每个点有点权,定义2个点u和v之间的距离为u到v的路径上的点的点权的异或和。求全体点对(u,v):1分析:考虑按位处理距离和。设有ans[i]个点对的距离的第i位为1,则距离和=ans[0]*2^0+ans[1]*2^1+...+ans[20]*2^20。从而问题转化为点权为0或1的情况。对于转化后的问题,我是用树分治处理的:对于子树u的所有点对路径,要么

2017-02-08 13:46:36 727

空空如也

空空如也

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

TA关注的人

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