- 博客(196)
- 收藏
- 关注
原创 UVALive 7003 A Balance Game on Trees 树形dp
题意:有一颗现在要求,每个白色节点必须刚好和k个黑点相邻,不能则将其染黑,问你最终最多可以有多少个白色节点保留。思路:特判掉k = 0的情况;dp[i][j][z]:以i为根节点的子树,节点i的颜色为j,和它相连有z个黑色节点所得到的最多的白色节点个数。由于z只有k-1和k两种状态是有用的。因此只要三种状态。dp[i][0][0]:i节点白色,子树有k-1个
2015-10-18 15:53:21
506
原创 POJ 1091 跳蚤 容斥原理
题意:略思路:a1*x1+a2*x2+a3*x3+……+an*xn+M*xn+1 = 1看了别人blog才知道,本质是让你求出gcd(a1, a2, ……,M) = 1的方案数。a1~an均首先总方案数tol是M^N(数据貌似都没有超出long long,因此不用大数)若M = 30 = 2*3*5;则容斥过程就是 tol - (deal(2)+deal(3
2015-10-17 14:35:46
422
原创 HUST 1214 Cubic-free numbers II 容斥原理
题意:求出区间[L,R)内,有多少个不能表示成(x^3)*k的数,其中x > 1。L,R范围应该是 带符号64位整型数内。思路:9个月前做的那个容斥原理的专题遗留下来的问题。。最近做一下莫比乌斯反演,把容斥原理什么的都搞一下。R最大可能达到10^18,开个3次方根号,降为10^6.*若x=2,则1~M范围内,有M/(2^3)个数可以表示成题意所描述的形式
2015-10-17 14:07:33
421
原创 hdu 5496 Beauty of Sequence (map维护)
题意:给你一个序列,求出这个序列的所有子序列,求出所有子序列的beauty值的和。思路:(貌似官方题解的思路更加简单明了)两个变量,sum记录前面以a[j](j 并且用map记录,map[a] = t,以a结尾的路径数为t。当来到i位置,tmp = cnt+1-map[a[i]],便是到达a[i]的路径数;计算以a[i]结尾,对sum的贡献值。更新cnt、sum还有
2015-10-04 20:05:37
413
原创 hdu 5486 Difference of Clustering
题意:略思路:这题杭电的oj卡内存有点恶心,在杭电oj,vector不能乱用。。看完题解这题感觉好简单的说。。。首先把输入的值进行离散化,离散化完之后大概有1e5个左右。然后用vector分l,r保存集合之间的连线。split:左边的度数>1,对应左边的任意一个集合度数 = 1;merge:换过来做,就变成了s
2015-10-03 15:23:10
308
原创 hdu 5381 The sum of gcd 莫队算法+区间gcd
题意:略思路:杰哥说这种题他都做烂了。。。。orz对于每个a[i]值,我们处理出以a[i]为起点,分别往左边和往右边的gcd区间的情况(gcd区间个数不会超过log(a[i])个,简单解释就是gcd相同的可以合并,且随着区间扩大,若gcd值不同,则每次至少除以2)。a[i+1]的gcd区间可以由a[i]的情况推出,遇到可以合并的区间(gcd相等)就合并掉。例如 2 3
2015-08-13 23:37:14
1010
原创 hdu 5378 Leader in Tree Land dp+逆元
题意:一棵有n个节点的树中,明显有n棵子树。现在有1~n个数字,让你填充到节点。一棵子树的leader就是这棵子树里面最大的数字,很明显,一个数字可以作为多棵子树的leader。现在让你找出这n个子树里,恰好有k个leader的方案数。思路(官方题解):感觉官方题解很有道理,但还是不太能理解= =。第一次遇到这种类型的。。。可以用求概率的思想来解决这个问题。令以
2015-08-13 10:34:52
384
原创 codeforces 567D One-Dimensional Battle Ships (map维护)
题意:在1~n的格子里,有k艘,每艘长为a的船,并且这些船不相交且不能相邻。现在有m个射击,每个射击给你一个位置(1~n),并且不会重复。由于对方每次都说没打中,因此你想找到至少要射击几次才能证明对方说谎。若不能证明对方说谎,输出-1。思路:n个格子,船长为a,则能放(n+1)/(a+1)艘船。(由于要求不能相邻,因此a+1)。使用map来维护。map[i]:维护i
2015-08-06 19:52:53
579
原创 codeforces 567C Geometric Progression (map维护)
题意:略思路:枚举每个值a作为中点,使用两个map来维护a左边和右边的值的情况。code:#include using namespace std;const int N = 2e5+5;typedef long long LL;int n, k;LL a[N];map mp, mp2;void solve() { mp[a[1]]++; f
2015-08-06 19:40:16
415
原创 hdu 5324 Boring Class cdq分治+树状数组+离散化
题意:给你两个序列,两个序列都有n个数。然后让你找到一个位置序列,对应到两个序列上,使得新的L序列非递增,R序列非递减。问你最长的长度是多少,并输出字典序最小的方案。思路:人生的第一道cdq分治,一直觉得这些类型学会了放在比赛也做不出来就没去学了。。。但看到辣么多人会做。。。赶紧搞起。思路、代码盗自别人blog:http://blog.csdn.net/u0130079
2015-08-01 15:09:47
414
原创 hdu 5325 Crazy Bobo 拓扑排序
题意:给你一棵树,每个节点上都有一个权值。让你找到一个连通的节点集合,使得根据节点权值升序排序后,第i个节点到第i+1个节点所经过的其它节点权值都小于第i个节点的权值。问你这样的集合最大的size。思路:比较朴素的思路:枚举以每个节点作为根,进行dfs搜寻所有比父亲节点权值大的节点个数,复杂度n^2。如果我们开一个数组保存之前已经统计过的节点个数,则复杂度降为O(n
2015-07-29 14:04:58
521
原创 hdu 5318 The Goddess Of The Moon 矩阵快速幂+dp
这题意也有够坑的。。题意:给你n(=2,则b串可以连在a串后面(注意,不用合并a,b串相同的位置)。每个串的个数都是无穷个,现在让你选m(11 111111 11*上面两个串并不相同,因此算两个。思路:注意字符串去重。还好m不会等于0。= =||先暴力求出每个串能转移的位置。a[i][j]为1,第j个字符串能连在第i个字符串后面;反之为0,则不能。
2015-07-28 21:13:57
790
1
原创 Codeforces 559C Gerald and Giant Chess (dp+组合数+逆元)
题意:从左上角走到右下角,每走一步只可以往下或者往右,其中有一些不可以走的点(黑点),问有多少种方案。思路:看了别人的blog,这不就是一个原题么。。。知道两个点,原来直接求组合数就可以得到它们的方案数,这个倒是才知道。http://blog.csdn.net/popoqqq/article/details/46121519引用自上面链接:首先把坏点和终点以x坐标为第一
2015-07-24 20:15:09
476
原创 topocoder Arena 客户端无法打开、下载jar包失败、jar包签名
每次打开topcoder Arena时,客户端都会检查一下jar包签名之类等等。在某些网络下,这个过程会比较漫长。我寝室是移动的网,每次打开topcoder,都会提示jar包签名有问题,不让我进入。在连入其它的网络后,清除java缓存,重新下载客户端则一切正常,换回自己的网络又gg了,于是为此苦恼很久。后来直接开aogent代理,总算能正常进入了。不过最近GoAgent也跪了,打不开客
2015-07-23 22:41:08
770
原创 Codeforces 558E A Simple Task 线段树(区间更新)
题意:给你n个区间操作,把每个区间内的小写英文字母以非递增或非递减的方式进行排序,最后输出结果。思路:参考自:http://www.cnblogs.com/crazyacking/p/4649878.html因为只有26个字母,所以建立26颗线段树,来保存每个字母在所有区间的位置情况。线段树的作用:快速查询区间某个字符的个数,快速更新区间字符的个数。具体看代码内注释。
2015-07-20 11:19:15
385
原创 Codeforces 558D Guess Your Way Out! II 排序、区间求交、并
题意:有一颗高为h的完整二叉树,出口在某一个叶子节点上。有n次问答,每次你问一个区间,系统都会告诉你出口是否在这个区间内。而你的任务是根据n次问答,判定出:系统作弊、出口位置、条件不足以判断出口。思路:看了很多其它的题解,最后还是感觉杰哥的思路来的简单。首先把所给的每个区间都映射到叶子节点的区间。1.求所有为真的区间,并求出它们的交集,记为a。(a为一定存在的区
2015-07-20 11:03:37
540
原创 URAL 1720 Summit Online Judge 乱搞题
题意:每场比赛有x~y题,每一卷要求分为l~r题。每一卷的题数要求一样。现在问你一卷内,可以包含一场或多场比赛的题,且刚好等于卷的大小,在l~r中有几个是可行的。思路:来源:http://www.cppblog.com/Yuan/archive/2011/08/01/152243.html?opt=admin不过我按照上文博主的思路写了一发,就算用double也一样溢出,导致不
2015-07-18 11:10:31
435
原创 Codeforces 558C Amr and Chemistry 位操作
刚刚FST掉,好明显的错误居然过了60+组。。题意:给你n个数,让你通过下面两种操作,把它们转换为同一个数。求最少的操作数。1.ai = ai*22.ai = ai/2,向下取整思路:看到乘2,除2是不是应该有点感觉。对,就是位的左右移位。因为ai对于ai,我们处理出它转换到所有其它数的最少操作数。处理过程:一开始ai,首先先执行右移,直到1e5
2015-07-15 01:57:47
671
原创 UVALive 6507 Passwords 哈希+无序map
题意:有n个字符串,每个字符串长度不超过20,000。让你找出两个不同字符串中所隐藏的前缀字符串v,和后缀字符串w。然后使得v连接|w|次等于w连接|v|次。|v|表示字符串v的长度。输出|v|,|w|的结果。如果有多种方案,让你输出两者和最大的。思路:hash+umap看杰哥代码的。首先我们把所有的字符串从前到后hash一遍,并将它们的前缀hash值都插入到uma
2015-07-14 14:40:53
440
原创 SCU 4444 Travel 最短路
题意:有n个城镇,他们两两之间都有双向公路连接。其中有m条是高速公路,其它都是普通公路。每条高速公路的时间代价为a,普通公路时间代价为b。现在给你m条高速公路的情况,让你求出1到n的最少时间代价。思路:最短路。我就怎么感觉这么像之前做的一道题。先根据高速公路分别求出城镇1和城镇n到其它各点的最短距离(有的城镇是高速公路不可达的,设为无穷大)。现在把普通公路也融入
2015-07-13 01:04:51
158
原创 SCU 4438 Censor KMP/哈希
题意:给你a,b字符串,把每次b中出现的a删掉,然后将剩余串连接起来,继续找a删,直到b中不存在a。思路:我是用KMP写的。KMP:套用KMP模板求得失配数组,再开一个栈(我用的数组)保存没有被删除的字符以及已经匹配了a字符串的字符个数。如果在b中完整匹配到了a,则把length(a)个字符出栈,然后取栈顶保存的已匹配的字符个数继续去匹配a,栈为空则从0开始。复杂度
2015-07-13 01:01:15
905
原创 codeforces 555C Case of Chocolate set操作
题意:有一块n*n大小的巧克力,n思路:网上各种搜,大神们的题解都写得好简洁啊。
2015-07-02 15:23:50
763
原创 Codeforces 557C Arthur and Table 乱搞题
题意:如果最长长度的凳脚数量超过总凳脚数的一半,则认为这个凳子是稳定的。现在有张凳子,有n个凳脚,分别分出长度和砍掉该凳脚的费用。问你要使得凳子稳定的最小费用。思路:其实是很简单的一题。要砍当然是砍费用小的,当时没想到怎么维护前面最小费用,然后就gg了。首先根据长度排个序,然后枚举每种长度作为最长长度。枚举到当前长度时,相同长度不砍,把比当前长度大的全砍掉(这个比较
2015-07-02 14:38:28
1130
2
原创 Codeforces 555B Case of Fugitive 排序+贪心
题意:有n个岛屿放在同一个条线上,并且把每个岛的左右端点给你。然后有m条桥,每条桥都有一定的长度。现在让你把桥放在相邻两个岛之间,使得它们能够连通(桥的两端要落在两个岛屿上)。现在问你,是否存在合法方案,存在则输出方案。不存在则输出"No".思路:首先对于两两相邻的岛屿,根据端点值,我们可以处理出n-1个可放桥的长度区间。然后对于n-1个区间,根据l值进行升序排序。
2015-06-28 11:45:10
872
原创 codeforces 553B Kyoya and Permutation 构造+规律
题意:定义了一个序列映射,映射之后会生成一个或多个环。由于同一个序列映射可以表示生成很多种环表示,然后就定义了标准环表示法。首先先让环内最大值放在第一位(例如有环2->4->1->2,则该环为(412)。),然后每个环再根据第一位的值从小到大排序。排完序之后去掉括号,就得到一个新的序列映射。有些序列,经过上面的操作后得到的序列与原序列一样。现在题目要你求出长度为n时
2015-06-26 20:17:13
578
原创 codeforces 553D Nudist Beach 二分+bfs
題意:給你n个点,然后让你选出一些点,使得每个点的比率最小值尽量大,让你输出你所选的点。其中有m个点是不能选的。k条无向边,连接着点与点,保证只有一个连通块)。点x的比率= (点x的邻居,且在你所选的点集内)/(点x的所有邻居)。思路:二分、bfs二分比率(0~1).首先,我们假设所有可以选入的点都已经选进来,计算每个点的ratio,对于ratio 然后bf
2015-06-26 19:54:31
1312
原创 codeforces 553A Kyoya and Colored Balls 组合数学
题意:有k种球,每种球有a[i]个。现在它们都放到一个袋子里,要求取出来的时候,第i种球完全取出来要在第i+1种球前面。问你有多少种取法。思路:比赛时没想出来。。。结果其实是很简单的。倒过来统计就好了。假设n = sum(a[i]);首先先看第k种球,如果先把其中一个球放到最后一个位置,那么剩下的a[k]-1个球就是随便放,则有c[n-1][a[k]-1]种放法。
2015-06-26 10:54:21
694
原创 hdu 5266 pog loves szh III LCA+RMQ
题意:给你一棵树,然后询问l~r节点的最近公共祖先(LCA)。思路:用RMQ维护一段区间的LCA,然后询问时,将两个区间的LCA再求一次LCA即可。code:#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include #include using namespace s
2015-06-19 14:05:30
374
原创 zstuoj 2857 3698 单调序列 dp、离散化
题意略思路杰哥提醒的dp,一开始想的就是dp,但状态就是定义不出来囧。状态定义:dp[i][j]:前i个数已经排好,第i个数是第j小的最小所需要改变的值。状态转移:dp[i][j] = min(dp[i-1][1...j]+abs(a[i]-b[j]));需要用到离散化,b数组就是保存离散化后的值,a数组是原来的值。2857数据比较弱(数组大小2005),369
2015-06-17 19:03:10
541
原创 codeforces 551E GukiZ and GukiZiana 分块
题意:给你一个数列,有两种操作,第一种操作将l~r区间加上val,第二种操作是询问整个序列,是否存在val,若存在,则找出相差最远的两个val下标的差值。没有则输出-1。思路:分块。刚
2015-06-17 16:48:04
676
5
原创 zstuoj 2853 算术表达式 模拟
题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=2853题意:给你一个算数表达式,保证正确,让你求出结果。思路:长度只有150,暴力模拟递归。1.若字符串s最外层存在加减号,则处理加减号。(注意首字符为减号的情况)2.1不成立,则找最外层的乘除号。3. 1、2均不成立,则检查整个字符串是否被一个()
2015-06-17 12:17:06
640
原创 UVALive 4513 Stammering Aliens (hash+二分 or 后缀数组)
大白书上的一道例题,后缀数组的模板题吧,今天想练练hash,结果就wa+Tle了一脸。还真没见过不卡自然取模,而卡自行取模的题,今天算是见到了。。取了好几个x,还是发生了碰撞?!题意:让你根据所给字符串,找出至少出现m次的最长字符串,输出最长的长度和起始位置的最大值。思路:字符串hash+二分。(等学会了后缀数组再来套下模板)二分len,然后判断长度是否合法。判
2015-05-22 20:54:41
516
1
原创 HDU 4067 Random Maze 最小费用最大流
完全参考自:http://www.cnblogs.com/wally/archive/2013/08/29/3288898.html建好图,套个模板就OK了。code:#include using namespace std;const int N = 105;const int M = 1005;const int INF = 0x3f3f3f3f;typedef l
2015-05-22 14:49:44
381
原创 codeforces 543d Road Improvement 树形dp
题意:在一棵根节点为1的树上,一开始所有的路都是坏的,现在你可以修路。让你找出以每个节点为首都,到达其他任意一个节点所经过的坏路不超过1条的方案数。思路:参考别人的。参考完之后又感觉思想狠简单。。。dp1[i]:以i为根的子树,满足到达这棵子树的任意节点的坏路不超过1条的方案数。dp2[i]:从该点出发,往父亲方向的满足要求的方案数。首先先看dp1。假设
2015-05-21 20:12:46
606
原创 HDU 4069 Squiggly Sudoku DLX 精确覆盖
题意:数独问题,给你9个连通块,每个连通块有9个位置。现在已经有一些数字在上面,让你在空的位置上放数字。问你是否存在方案,使得每个连通块包含1~9,并且每行每列都有1~9的数字。输出结果参照样例。思路:题中并没有直接给出数独的情况,而是给了一个数值,里面包含了连通块以及是否有数字在该位置的信息。首先根据所给的数值,bfs把每个连通块都找出来,然后编号。剩下的
2015-05-21 17:57:22
381
原创 又一年 —— 记浙江第十二届省赛
前言:拖延症越来越严重了,本来应该早点写这篇文章= =。虽说打算写,但这期间一直没想到应该写什么,但感觉还是写点东西吧= =,毕竟好久没写感想了,记得上次写还是去年打完省赛。(也就是受囧king感染了才写的一篇)正文:第二次来到紫金港了,还是一样的配方,还是熟悉的味道,不过天气较去年好很多。想到去年还是两位大四学长带着我这个基本是打酱油的货来打省赛,今年变成自己还有jinye带
2015-05-04 00:53:34
658
原创 Codeforces 538D Weird Chess 暴力、构造
题意:(题意真的好难看懂。。。)在一个棋盘上,x点是一定被攻击到的位置;o点是有棋子的格子,可能被攻击到,也可能不被攻击;其它点是不能被攻击的。现在让你找出(n-1)*(n-1)棋盘,然后使得在中间的棋子的攻击范围,是符合题中所给的范围。有很多种情况,因此是special judge。题中所给的样例输出基本上是不会出现的= =思路:暴力枚举方向。(i:-n~n)(j
2015-05-03 23:18:03
858
原创 Codeforces 538F A Heap of Heaps 离线+树状数组+离散化
题意:给你n个数,这n个数构成1,2……,n-1叉树。问你构成1~n-1叉树,儿子比父亲大(即不符合最小堆的情况)的个数分别是多少。思路:首先把每个询问区间都求出来(每个询问区间分为两个区间,询问[l,r],则分为[1,l-1]和[1,r])两个for循环,遇到不存在的区间直接break。复杂度不会超,证明不会证= =||然后根据右端点从小到大排序(左端点都是1,因此结构体中不
2015-05-03 22:50:56
686
原创 Codeforces 540D Bad Luck Island 概率dp
题意:有r个石头,s个剪刀,p个布在一个岛上。问在足够长的时间里,石头,剪刀,布分别存活下来的概率。思路:感谢铭神指导!定义dp[i][j][k]:还剩下i个石头,s个剪刀,p个布的概率。初始dp[r][s][p] = 1;转移:总情况数:tol = i*j+j*k+i*k;则dp[i-1][j][k] = (i*k/tol)*dp[i][j][k];dp[
2015-05-03 21:54:42
739
原创 Codeforces 540E Infinite Inversions 离散化+树状数组
题意:有一个无限长序列。进行n次操作,每次把下标为i, j的两个值交换。最后问你整个序列的逆序数的个数。思路:求逆序数分为两部分。一部分是交换过位置的,另一部分是没有交换过的。第一部分:用map处理n次操作后的情况。离散化后,利用树状数组求出交换过的位置的逆序数的个数。第二部分:看一个样例:21 69 5得到的序列为6 2 3 4
2015-05-03 21:29:26
788
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人