acm
文章平均质量分 72
johsnows
正在静下心来学算法的acmer
展开
-
2016暑假集训
7.28凌晨回校集训的第十天了,正式开始集训的这几天感觉莫名卡题特别多,一般都是写法不对,感觉自己写代码的时候习惯不是特别好。有时候宁愿少思考一点多打点代码敷衍一下,这样复杂自己的代码会导致自己怎么出错都不知道,而且其实不省力。自己真的是懒到骨子里了,既然要好好做一件事情就应该不要再懒了,努力去做呗。嗯,总之接下来要改掉这个写代码的习惯。提高效率,多讨论,多问,很重要!------原创 2016-07-28 00:14:25 · 491 阅读 · 0 评论 -
2016 CCPC 杭州站 总结
再次来到杭电,其实是有点难过的,虽然我一直没说,走在杭电的校园里的时候还能想起来自己上次来的时候的种种幼稚。但是这场比赛打下来,感觉自己也想开许多了,虽然还是比赛还是失败了。恩,讲比赛吧。热身赛的时候就出了一道题,第二题队友去做了,我就没管,表示d题连题意都搞不清楚,当然,搞清楚了我也不会做,c题是计算几何的模板题,然而我没做过几何的题,然后板子也没带,平时偷的懒比赛就看出来了。(表示对面原创 2016-10-22 21:08:03 · 1249 阅读 · 0 评论 -
欧拉函数
欧拉函数 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如euler(8)=4,因为1,3,5,7均和8互质。 Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身转载 2016-10-31 21:30:21 · 359 阅读 · 0 评论 -
广度优先搜索介绍
BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法。原创 2016-11-01 19:14:40 · 837 阅读 · 0 评论 -
cf 758 D Ability To Convert (dp)
题意:给一个n和长度不超过60的数字字符串k,问将k转换为n进制能得到的最小的数字是多少。解题思路:比较明显要有动态规划来做,贪心会有后效性。最开始想的是从后往前dp,每一位枚举从这一位到之后得到的不大于n的数字x再加上相应的dp值,取出最小那一位,但这样做会有后效性,因为我没有保留每个x对应得dp值,导致某些x在之后可能会更小但是我没有保留而得不到最优解。然后看了q神原创 2017-02-07 09:54:08 · 944 阅读 · 0 评论 -
cf 759 A Pavel and barbecue
题意:给一个序列,序列值代表对应下标下一秒硬币要移动到的下标,再给一个相同01序列,1代表在这个位置下一秒硬币翻转。问需要修改几次这两个序列使得每一枚硬币经过若干秒后能以正面和反面的姿态都经过过每一个点。解题思路:之所以需要修改是硬币的移动位置会形成循环,而这个循环有可能不是全局的,是分成几堆硬币内部循环,我们需要找出这样硬币的堆数,如果堆数是一那么正好不用改,如果大于一就需要原创 2017-02-07 14:43:39 · 381 阅读 · 0 评论 -
poj 3096 Surprising Strings
题意:看题目示例领会Consider the string ZGBG. Its 0-pairs are ZG, GB, and BG. Since these three pairs are all different, ZGBG is 0-unique. Similarly, the 1-pairs of ZGBG are ZB and GG, and since these two p原创 2017-02-07 16:08:14 · 339 阅读 · 0 评论 -
poj 3007 Organize Your Train part II(map)
题意:给一个字符串s,将s在任意一位拆开成两个子串s1, s2,可将子串翻转,然后重新连接一起形成新的字符串,可以让s2在前,问最终能形成多少个不同的字符串。解题思路:枚举不同的拆分情况,然后用map,当然,这么耿直肯定是要超时的,但是我加了点优化,水过去了,嘻嘻。map比较慢,这题数据比较大,其实不如直接写查找树。代码:#include #include原创 2017-02-07 17:21:38 · 309 阅读 · 0 评论 -
cf 766 d Mahmoud and a Dictionary(带权并查集)
题意:给一些单词,它们可能是同义或者反义,给出一些关系定义,从前面的定义开始建立关系,如果有的关系定义和之前的冲突输出NO,否则输出YES。然后查询q次单词x和单词y的关系。解题思路:很明显就是带权并查集,但是我不太会用,去网上找了食物链的代码,改了下代码,但是每改公式,强行把关系差为2和3的都当做反义关系,结果错了。结束后去学习了下带权并查集,然后直接把公式改了改就过了,发现原创 2017-02-08 10:34:19 · 351 阅读 · 0 评论 -
codeforces 766 c Mahmoud and a Message(dp)
题意:给一串字符串,只包含26个字母,可以把这串字符串分成若干个子串,但是限定每个字母只能出现在长度Ax的子串里,问最多有多少种分割方案,方案数对1e9+7取膜,以及分割子串最大长度,和最少分割子串数量。解题思路:设dp[i]为从0到i这段字符串的分割方案数,为了满足字符a[i]的限定条件,我们只能在i-Ai+1到i之间划分,设len=i-A[i]+1, 但是i-A[i]+1并原创 2017-02-08 17:04:34 · 649 阅读 · 0 评论 -
hdu 5927 Auxiliary Set (dfs)
题意;一棵大小为n的有根树,根为1,有q次查询,每次查询给定一个set,set里的点为不重要点,不在set里的点为重要点,问树上有多少个点满足一下两个条件1.是重要的点.2.是两个重要的点的最近公共祖先解题思路:这题的结题方法比较巧.考虑一个不是重要的点能满足条件,需要它有两个子树存在重要的点,如果我们从不是重要的点里深度最深的点开始考虑,如果这个点有两个子树,那么就一原创 2017-02-16 20:03:19 · 401 阅读 · 0 评论 -
hdu 5925 counts (二维离散化+dfs)
题意:在一个R*C的地图上,有n个障碍点,问最终有多少个联通块,R,C的范围是1到1e9结题思路:第一次将一个二维地图离散化.考虑x这一维的离散化,我们将障碍物之间那块长度压缩成一个点,用vetor记录下来,每个障碍物也记录下来,y这一维相同,这样我们就得到了一个最大是400*400的点,那么我们就用普通的dfs求联通块的办法去做就行了.代码:#incl原创 2017-02-16 20:13:03 · 432 阅读 · 0 评论 -
uva 7219 Problem on Group Trip (优先队列)
题意:三种洗漱房s1,s2,s3,n个人,每个人按1到3的顺序排队等候洗漱,给出每人在这三个洗漱房需要多少时间洗漱,并且排队过程中,编号小的先洗漱,问需要多少时间所有人完成洗漱解题思路:用优先队列存储在3个房间的等候队列,如果洗漱玩了,就加入到下一个队列,注意如果两个相邻队列队首的人同时完成洗漱,那么应该先让编号大的那个队列队首的下一个人先开始洗漱,然后再让编号小的那个刚刚完成原创 2017-02-17 14:18:38 · 433 阅读 · 0 评论 -
HackerRank - gcd-matrix (容斥)
题意:给出a序列和b序列,定义矩阵M,M(i,j)是a[i]和b[j]的gcd,有q次询问,每次询问(r1, c1)到(r2, c2)这个小矩阵里有多少个不同的gcd。解题思路:a序列和b序列的长度都是1e5,所以暴力求解gcd肯定会超时。既然我们没有办法去求出gcd,那么我们可以反过来去验证1e5之内的数是否是这个矩阵里的一个gcd。具体的做法是,先求出a序列中包含i这个原创 2017-02-09 21:39:42 · 437 阅读 · 0 评论 -
poj 1703 Find them, Catch them(并查集)
题意:城市里有两帮犯罪团队,给你m条信息,D x y表示x和y不是同一帮,A x y是查询x和y的关系。解题思路:用带权并查集可以很好的解决这个问题,定义ran[i]为i与祖先节点的关系,0表示同帮,1表示不同帮。查询的时候如果两个点不在一棵树上,说明有节点的信息还没有给出过,那么不能确定两者之间关系,如果在同一棵树上而ran[x]==ran[y],那么说明他们是同帮,反之不同原创 2017-02-10 09:36:43 · 227 阅读 · 0 评论 -
poj 2492 A Bug's Life(并查集)
题意:有两种性别的bug,研究发现他们每个bug只和不同性别的人交流,给出一些bug之间交流记录,问这个研究是否正确解题思路:定义ran[i]记录i与祖先的关系,用带权并查集来存储bug之间的关系。如果交流记录里出现有两个bug在同一棵树上了,而且他们还是同一个性别,那么说明研究不正确,如果没有这样的两个bug,那么说明研究正确。代码:#include #in原创 2017-02-10 10:11:04 · 470 阅读 · 0 评论 -
Atcoder Beginner Contest 55 D Menagerie (枚举+验证)
题意:有两种动物,羊会说事实,狼会故意说谎,一群动物站成一圈(只包含狼和羊),他们没人分别说自己旁边的两种动物是否相同.题目里是给出一串字符串,字符串里'X'代表站在这个位置的动物说它两边的动物种类不同,'O'代表站在这个位置的动物说它两边的动物种类相同,求符合这个字符串的动物排列方式,如果没有输出"-1".结题思路:数据范围是1e5,没有办法去枚举所有答案.但是根据题目给原创 2017-02-19 15:20:23 · 452 阅读 · 0 评论 -
codeforces 767 b The Queue(模拟)
题意:n个人排队去办理通行证,给出办公室开始办理的时间s和停止办理的时间d,以及办理一个人的通行证需要花费的时间t,小明也想去办理通行证,在知道n个人都是什么时间(a[i])来的情况下,小明想知道自己什么时候去自己能够办理到通行证且等待的时间最少,另外小明如果和别人同时到,他会排在这个人后面思路:模拟.我们模拟经过第i个人后,办公室要在什么时间才能办理,用变量记录,一开始就原创 2017-02-19 19:34:09 · 523 阅读 · 0 评论 -
codeforces 767 c Garland(dfs)
C. Garlandtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOnce at New Year Dima had a dream in which he was presente原创 2017-02-19 19:53:55 · 1139 阅读 · 0 评论 -
一位ACM过来人的心得
刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练? 我想说下我的理解。 很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。 我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。 其实,500题仅仅是一个标转载 2017-02-19 20:14:43 · 447 阅读 · 0 评论 -
codeforces 763 C Timofey and remoduling(数学)
题意:给出序列a,质数m,序列长n,序列a是对m取模后的序列,问是否能找到一个原序列是等差数列,输出首项和公比。否则输出-1。解题思路:首先需要知道两个公式:1.等差数列各项和公式变形:a1=(Sn-n*(n-1)/2*d)/n2.等差数列各项的平方的和的公式:Sn^2=n(a1)^2+n(n-1)(2n-1)d^2/6+n(n-1)*d*a1(以前不知道这公式。。)原创 2017-02-10 16:36:16 · 954 阅读 · 0 评论 -
UVALive - 6582 Magical GCD (脑洞)
题意:给一个数列,定义Magical GCD为序列gcd*序列length,问数列中子序列最大Magical GCD是多少.解题思路:定义i,j,i为长度,j去遍历i之前的数,逐步求GCD更新最大值,这种做法的时间复杂度是 n^2,这样暴力求肯定是超时的.但是我们可以从这个思路去优化,我们会发现在逐步往前求GCD的时候,可能我们会连续的求出一些相同的GCD,这些相同原创 2017-02-20 16:11:24 · 543 阅读 · 0 评论 -
codeforces 768 C Jon Snow and his Favourite Number(循环节)
题意:有一个长度n的数列,琼恩有一个喜爱的数x,琼恩每次去隔一个 数对数列里的数异或,请问k次操作后数列里最大的数和最小的数分别是什么解题思路:这种题一般来说操作后的数列是有循环节的,然后看到群里qc爸爸问有没有循环节不是2的例子的时候就更确定了。先去模拟下操作,然后每次操作出来的数列都去和之前得到的数列比较,看看是否有相同的数列,如果有就找到循环节了,只要让k对应到这个循环节原创 2017-02-21 09:53:30 · 1246 阅读 · 0 评论 -
codeforces 768 D Jon and Orbs(概率dp)
题意:琼恩要派遣游骑兵去鬼影森林获取龙晶,共有k种龙晶,鬼影森林每天产生一种龙晶,由于长城以北过于危险,所有琼恩想知道让每种龙晶都至少有一件的概率大于p/2000至少需要多少天.共有q次询问,琼恩忙于和山姆讨论战术,这些问题就交给你啦.解题思路:概率题不会啊,QAQ,好不容想懂了题意,但是不会.不能理解题意的同学可以考虑,因为每天可能产生之前出现过的龙晶种类,所以即使k天也原创 2017-02-21 17:21:29 · 1082 阅读 · 0 评论 -
codeforces 768 B Code For 1 (数学)
题意:一个集合里一开始只有n这个数,每次操作把集合里大于1的数分为,,,三个数,它们的位置在原位置,知道集合里所有的数都是0和1.现在循环l到r区间内有多少个1,保证r-l例如:解题思路:一开始用链表去模拟做,内存炸了.然后开始想去计算的办法.我们可以发现原创 2017-02-21 09:39:22 · 673 阅读 · 1 评论 -
POJ 1961 Period(KMP)
题意:在一段字符串的所有前缀中,找出有循环节的那些前缀,并分别求这些前缀的最大循环节数量。解题思路:用一下公式 循环节数=(i+1)/(i+1-next[i])(当(i+1)%(i+1-next[i])==0时)即可代码:#include #include using namespace std;const int maxn=1e6+5;char str原创 2017-02-13 14:43:05 · 589 阅读 · 0 评论 -
hdu6012(bestcoder 91) Lotus and Horticulture(离散化+前缀和)
题意:这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望。Lotus将所有的nn株盆栽都放在新建的温室里,所以所有盆栽都处于完全相同的环境中。每一株盆栽都有一个最佳生长温度区间[l,r][l,r],在这个范围的温度下生长会生长得最好,但是不一定会提供最佳的研究价值(Lotus认为研究发育不良的盆栽也是很有研究价值的)。Lotus进行了若干次试验,发现若第ii原创 2017-01-23 19:50:34 · 470 阅读 · 0 评论 -
codeforces 755 d PolandBall and Polygon(找规律)
题意:给一个凸n边形,给定一个数字k,保证gcd(n,k)等于1,每隔k个点连一条线,问每连一条线凸多边形被划成多少块。思路:容易得出,每次画一条线,它所多划分出来的块数就是它穿过的线数加一,而它所穿过的线的数量就是这条线连接的两个点之间,已经有线连接的点的数量乘2.例如在2和4之间连 一条线,2和4之间3已经被连接了,所以2和4这条线穿过的线的数量就是1*2。但是原创 2017-01-16 13:19:18 · 736 阅读 · 1 评论 -
hdu 5945 Fxx and game(单调队列,dp)
题意:一开始你将会得到一个数\:XX,每次游戏将给定两个参数\:k,tk,t, 任意时刻你可以对你的数执行下面两个步骤之一:1.\:X = X - i(1 1.X=X−i(1=i=t)。2.\:2.若\:X\:X为\:k\:k的倍数,X = X / kX=X/k。现在Fxx想要你告诉他最少的运行步骤,使\:X\:X变成\:11。思路:从x变成1其实等同于从1变成原创 2017-01-15 10:33:22 · 389 阅读 · 0 评论 -
zoj 3780 Paint the Grid Again 11届浙江省赛 (拓扑排序)
题意:给定一块正方形区域,大小为n,现在你能对每一行每一列进行一次操作,你可以 把一行涂成黑色,或者把一列涂成白色,但是每行每列都只能操作一次。现在给你目标区域,X表示黑色,O表示白色,问经过怎样的操作可以让得到 这个目标区域。Rx表示把第x行涂成黑色,Cx表示把第x列涂成白色,按操作顺序输出,要求操作数最少,且字典序最小。如果不能得到输出No solution。思路:首先我们原创 2017-01-14 10:36:31 · 357 阅读 · 0 评论 -
poj 3071 Football (概率)
题意:给一个n,有1思路:这题难度在于cooding,思路比较好想。我的做法是定义一个b[i][j]的数组,表示第j个人进入到第i轮的概率转移方程为: b[i][j]=b[i-1][j]*(a[i][k]*b[i-1][k]+a[i][k+1]*b[i-1][k+1]......)(k,k+1,k+2...为所有本轮可能面临的选手,比较难处理),最后找到第n-1轮中概率最大原创 2016-11-30 21:36:50 · 308 阅读 · 0 评论 -
hdu 3400 Line belt(三分套三分)
题意:在一个二维空间中给出两条线段AB,CD,线段AB,CD上的运动速度分别为p,q。在这两条线段之外的空间上运动的速度为r。求从A到D的最短时间。思路:我们可以列出式子time=ab/p+cd/q+bc/r;ab表示在线段AB上运动的距离,cd在线段CD上运动距离,bc表示从线段AB到CD运动的距离。可以看出来,这个式子是一个凹形函数而time2=cd/q+bc/r也是一个凹原创 2016-12-06 10:06:11 · 384 阅读 · 0 评论 -
poj 2065 SETI(高斯消元求模线性方程组)
题意:给出一个方程f (k) = ∑0aiki (mod p) always evaluates to values 0 每个字母代表一个f[k], a代表1,b代表2,以此类推,*代表0.让你求出ai并输出。思路:方程已经给出,直接建立方程,只要建立方程的过程没有写错,套用下高消求模线性方程组的模板即可,与poj 2947如出一辙,我直接套用那题的高消了,然后就过了。原创 2016-11-29 12:38:29 · 468 阅读 · 0 评论 -
poj 1487 Single-Player Games(高斯消元+字符串处理)
题意:给你几棵树,每棵树的叶子节点都有一个值或者其它树的期望,问每棵树走到叶子节点获得的值的期望是多少。每棵树的编号是从a到a+n-1.思路:被这道题,卡了好几天,快卡哭了QAQ。首先麻烦的是字符串的处理,用递归是一种比较好的办法,先记录下同一个括号里所存在的元素个数,再往下递归就好。然后建立方程。记a树的期望为Ea,把有确定值的叶子节点的期望求出来加和为va,以及求出走到原创 2016-11-28 21:38:50 · 365 阅读 · 0 评论 -
codeforces 735 D Taxes(数学)
题意:给你一个数,可以将它拆成n个数加和(n大于等于1),求这几个数最大因子(不包括自己)加和的最小值。思路:给这道题跪了,没有想到用哥德巴赫猜想,就当做是学姿势吧。对于一个素数来说,它最大因子就是1,所以答案明显是1.对于合素,分奇数偶数两种情况,对于一个大于6的偶数,可以拆成两个素数的和,所以它的最小值就是2,然后奇数可以通过减去一个非偶质数得到一个偶数,所以答案是原创 2016-11-28 19:34:50 · 419 阅读 · 0 评论 -
hdu 3359 Kind of a Blur(高斯消元求浮点型解)
题意:模糊处理的图是将图中每个点的值改为距离本身曼哈顿距离d以内的点的平均值,先给你一个高为h,宽为w的模糊处理后的图让你还原为原图。思路:简单的高斯消元,只要对图中h*w个点找出曼哈顿距离d以内的点再列个方程,求高斯消元就行。没注意看题习惯性的把第一个输入的w当做行数了,跪了快十几发,改了就A,QAQ。代码:#include #include #i原创 2016-11-17 11:05:16 · 484 阅读 · 0 评论 -
BZOJ 2844 albus就是要第一个出场(线性基)
Description已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 集构成的集合。定义映射 f : 2^S -> Zf(空集) = 0f(T) = XOR A[t] , 对于一切t属于T现在albus把2^S中每个集合的f值计算出来, 从小到大排成一行, 记为序列B(下标从1开始)。 给定一个数, 那么这个数在序列B中第1次出现时的下标是多少呢?原创 2016-11-16 11:52:13 · 502 阅读 · 0 评论 -
2016 沈阳 1003 Recursive sequence(hdu 5950)矩阵快速幂
题意:给出f[1]=a;f[2]=b;f[n]=f[n-1]+2*f[n-2]+i*i*i*i;问f[n]对2147493647取模的值,n的范围到2的31次。思路:由于n的范围过大,必须要用矩阵快速幂求解。难点在于构造矩阵。一开始我的想法是把i的四次分别用(i-1)的四次、三次、二次、一次、零次表示,来构造矩阵,结果一直错,后来看了网上有人是把i+1的四次用i来表示来构造的矩原创 2016-10-31 16:55:13 · 441 阅读 · 0 评论 -
codefoces 724 c Ray Tracing (扩展欧几里德)
题意:给定一个矩形,长n宽m, 一束光从矩形的一个顶点发射,角度为45度,遇到墙壁则反射, 只有遇到顶点时被吸收, 给你k个光传感器,光传播的速度是根号二m/s,问经过多少时间,光经过这个传感器, 若不能经过,则输出-1。思路:将矩形对称展开,把所有反射当做穿过看待,容易想到光在横纵坐标都为maxnx= m*n/gcd(m,n)(m,n的最小公倍数) 处吸收,因为光总是沿着y原创 2016-10-11 09:02:08 · 468 阅读 · 0 评论 -
hdu 5898 odd-even number (数位dp)
题意:一个数中,每位上数连续是奇数的长度是偶数,每位上数连续是偶数的长度是奇数的数称为odd-even number, 问区间l到r之间的odd-even number数有多少个。l,r的范围为1到9e18.解题思路:数位dp,dp[pos][status][ismax],pos记录当前位置,ismax记录当前是否是边界值,status记录当前状态, 奇数长度为奇数为1原创 2016-10-06 15:32:42 · 407 阅读 · 0 评论