CSU
文章平均质量分 92
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
CSU 1843:Jumping monkey 状压BFS (2010 Southwestern European Regional Contest)
1843: Jumping monkey Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 71 Solved: 13 DescriptionYou are a hunter chasing a monkey in the原创 2017-03-28 16:48:01 · 811 阅读 · 0 评论 -
CSU 1913: 送礼物 (二分答案 + 线段树)
不得不说,湖大出得一手好题,出现了一次两题场…… 数学什么的、fwt什么的简直被玩坏……最后发现有些题目还可以水过,对就是这题,湖大大佬O(N^2)水过了…… 回过头来看这题,这个思想确实非常的巧妙。原创 2017-05-06 10:49:34 · 741 阅读 · 0 评论 -
CSU 1922:Irony Ring(贪心算法)
这题不想多说了,连贪心的题目都能想不到。 题意就是给你圆环零件,每个有高度。问你最高能够叠多高? 当时也想得到,应该是一个贪心,而且也想到了类似一个最长不下降子串那样的贪心策略。但是没想到这个用一个栈就可解决(当时觉得要用好多个栈)。然后之后知道了开始自己打,发现错了T_T……最后终于发现原来顺序也是有讲究的,才算是A了。原创 2017-05-10 00:16:24 · 490 阅读 · 0 评论 -
CSU 2005 Nearest Maintenance Point(最短路+bitset优化转移)
比赛的时候MLE到想哭的题目,死都没想到用bitset…… 大致题意:给出一个图,然后给出一些关键点,然后有很多个询问,每次询问的时候问到达某点x最近的关键点是哪一个,如果有多个关键点同样近,那么把这些点全部输出。 如果不要求全部输出,那就是大水题一道,但现实是要全部输出来。初始的想法,对于每个点设置一个vector,存储到达每个点最近的关键点有哪些。但是发现合并起来并不方便,如果元素较多会导致超时。然后又考虑把最初来源作为新的一维,一起加入优先队列中,作为dijkstra的原创 2017-09-11 00:22:18 · 327 阅读 · 0 评论 -
CSU 1855 Shut the Box (状态压缩+BFS)
第一反应是往dp的方向上想的,枚举每一个状态,然后最后找到所有可行的状态中被摁下去的box的最多数目。然而这样的话总状态数1<<22,在加上有22个可以供拆分的数字,时空复杂度瞬间飙升(在这里我卡了第一次)。接着,我发现很多状态完全没有必要去枚举。初始时只有一个状态(全为0),往后状态是一步一步拓展出来的,也就是说,多余的步骤不需要枚举,只需要在这些拓展出来的点中继续转移即可。这样就和第二次多校赛的Monkey那题差不多了。利用一个bfs去不断的拓展状态,一直到最后无法拓展。对于原创 2017-03-27 19:47:41 · 1107 阅读 · 2 评论 -
CSU 1784 Internet of Lights and Switches(状态压缩+组合计数)
挺有意思的一道题目…… 就是有m个开关,有n盏灯,然后每个开关可以控制多个灯。开始时灯都是卡着的,你可以连续的摁一段区间的开关,使得灯的状态发生改变,问你有多少种摁法可以使得最后的所有灯都灭,还有可以摁的开关个数一定要在规定区间以内。换句话来说,就是有多少个区间的异或和是n个1。 这题比较好的地方是已经比较明显的提示了你用状态压缩。然后其实我一开始想了一会儿没有思路,完全就是因为刚刚那个异或和的影响……如果你考虑真的求和的话,不论怎么考虑时间复杂度都不能满足。于是我们考虑逆向原创 2017-08-28 20:14:29 · 458 阅读 · 1 评论 -
CSU 1552 Friends(Miller_Rabin素数测试+二分图匹配)
题意很简单,每个人有一个编号,如果两个人的编号之和是一个质数,那么两个人可以交朋友,然后每个人最多有一个朋友,问最多能够组成多少个朋友对。 很裸的一个二分图匹配,但是问题就是编号可以很大,大到1e18,那么主要问题就是判断一个大数字n,是否是质数。那么这个该怎么做呢?Miller_Rabins素数测试。 首先回顾一下,在此之前,我们用的判断素数的方法是试除法,即对于每一个数字n,从2开始到n-1,看这些数字能否整除n。这样时间复杂度是O(N)的,那么如果要求素数复杂度就是O(原创 2017-08-31 10:27:57 · 353 阅读 · 0 评论 -
CSU 1839: Who Feels Lucky(ACM-ICPC Asia Thailand National On-Site Programming Contest 2015)
还是多校赛的题,当时考虑不周全,然后,赛后有人问Rank1的队怎么做的,然后她发了一张图,所有人瞬间秒懂(学姐经验老道果然owesome!),这是一个非常非常非常巧妙的模型,非常的美妙!原创 2017-03-16 10:20:23 · 466 阅读 · 0 评论 -
第九次多校赛总结+CSU 1914+CSU 1921加强版解法
应该是2017年上半年的最后的一场多校赛了,真的挺想留下一个美好的回忆,但是无奈力不从心…… 从一开始就是,水题疯狂卡,然后题目做法没有弄清楚,就去敲模板……记得1921那题一开始没想清楚,先是打了一个树状数组,后来发现不对打了个线段树,最后发现直接暴力就可以过…… 水题过后就是一般的题目,然而不知道状态不好还是什么,很容易看出来的解法当时却没有想到,贪心和简单的数据结构的应用都没有做出来。还一直在抱怨原创题出的奇怪……其实这些都只能怪自己最近太水了。我承认是我的问题,数据结原创 2017-05-08 18:13:35 · 416 阅读 · 0 评论 -
CSU 1993 大司马的三角形中单(数位dp)
当时不够时间写了,但是后来回来了还是写了写,想清楚后,二十分钟左右就过了。 这里所谓三角形数,就是指数字从第一位开始先严格递增,在严格递减,然后最后有多个0也算是允许的。然后问你在一个区间内,有多少个这样的三角形数。这样的题目很显然就是数位dp。可以考虑,设dp[len][x][tp]表示在数字长度为len,第len位数字为x,tp为bool类型,表示是否已经出现转折点。这里我们先不考虑后面可以有多个0的情况。然后转移的话,要仔细考虑清楚,分几种情况。首先看是否出现过转折点,如果当前状态已经原创 2017-09-02 23:11:51 · 1278 阅读 · 0 评论 -
CSU 2017 Highest Tower(思维+构图)
大致题意:给你很多个矩形,然后宽小的矩形可以垒在大的矩形上,但是这个一定是严格的,矩形可以旋转。问最多可以把矩形垒多高。 其他的思路就不说了,大部分都是不对的,正解非常的巧妙。对于每一个长度,我把它抽象成为一个点,对于一个矩形,就有两个点,用边把这两个点连接起来。要求能够垒在一起,那么说明每一个长度都最多只能当作宽一次。然后,我们再人为的定义,如果存在边a->b,那么代表a边被当作了宽,即出度就是当作宽的个数。对于任意一条边,肯定存在一个入度和出度,总共有n矩形,所以在不存在正方形的情况下就原创 2018-04-06 13:45:11 · 443 阅读 · 0 评论 -
CSU 2020 Card Hand Sorting(暴力枚举+LIS DP)
大致题意:有n张扑克牌,大小规则有所不同,2是最小的,没有小丑,其他不变。现在按照顺序给出这n张牌,要求你进行排序,使得同花色的排连续的排在一起,然后每个花色内部要求递增或者递减。每次你可以把某一张牌移动到某两张牌中间或者最前和最后面。问最少的移动次数。 首先,还是回顾LIS相关的应用。显然就是求最小交换次数使得一个序列不上升或者不下降。所有同样也可以考虑用LIS来解决这道题。但考虑到有花色的限制,必须先去解决花色的问题。这里由于数据范围比较的小,可以考虑暴力的枚举最后的排列方式。由于花色只原创 2018-04-05 23:54:09 · 270 阅读 · 0 评论 -
CSU 2069 Saruman‘s Level Up(数位dp/组合计数)
大致题意:让你求在1到n范围内转换成二进制后1的个数是3的倍数的数字的个数。 典型的数位dp。设置dp[len][x]表示长度为len的二进制数字中含有x个1的个数。显然又转移方程dp[len][x]=dp[len-1][x-1]+dp[len-1][x]。记忆化搜索考虑lim的影响按照套路做即可。但是会发现对于1e8以上的数据就已经会超时了。经过分析可以发现,当len很大而x很小的时候,dfs的层数会比较多,时间消耗比较大。我们可以考虑增大这个x。容易发现,我计算长度为len的数字中1为x的原创 2018-04-17 21:51:29 · 259 阅读 · 0 评论 -
CSU 2022/2015 Artwork(并查集+逆向思维)
大致题意,每次可以把两个同行或者同列的点之间涂黑,然后每进行一次操作统计一次图的连通分量。 一道套路题,之前貌似做过两次。直接考虑逆向思维,从最后的分隔状态开始,每次往前减少一个操作,判断连通分量的减少情况。用权值表示每个地点被覆盖的次数,一旦出现覆盖次数变为0,即要进行更新,更新时首先增加一个连通分量,表示其本身,其次在合并四个方向,每进行一次合并减少一个连通分量。具体见代码(现场代码略丑):原创 2018-04-03 22:45:06 · 728 阅读 · 0 评论 -
CSU 2023 Bless You Autocorrect! (字典树+BFS)
大致题意,给出单词表,然后让你拼写一个单词。可以支持手动输入字符,手动删除字符和摁下空格键键入单词表中与当前输入串前缀相同的第一个单词。三种操作的代价都是1,现在给出一些单词,对于每个单词输出打出单词的最小代价。 首先,字典树是肯定可以想到的,当时想法是对于每一个节点弄一个first节点,指向与当前点表示串前缀相同的第一个单词的下一个字母的节点,但是这样子处理代价的时候不好统计。其实正解已经很近了。对于每一个节点,考虑连接一条边指向经过当前表示串前缀相同的第一个单词的末端节点,并且建立一个f原创 2018-04-03 15:03:23 · 503 阅读 · 2 评论 -
CSU 2033 New Country Division(线性基+思维)
大致题意:给你一个城市网络,每条路有权值,现在让你把这些城市分成两个部分,使得分开之后,这两个部分直接的所有连边的异或和最大,但要保证1和n分别在两个不同的部分里面。 看到题目,感觉很像一个网络流最小割类似的模型,相当于是找一个 异或和最大割。这东西听起来高大上,其实好像也并没有这样一个东西,想了几种增广路始终无法保证正确性。然而这题是可以转化为线性基问题的。 观察到一个点要么在1所在的集合,要么在n所在的集合。我们不妨一开始让除了n以外的所有点都在1所在的集合。计算出异或和原创 2018-04-10 10:04:50 · 348 阅读 · 0 评论 -
CSU 2037 Mars(后缀自动机+DFS)
大致题意,给你一个01字符串,然后再给你这个字符串的一个子串,问你在子串中至少修改多少个字符,才能够使得修改之后的串在原串中不出现。 现场拿到题就知道一定是SAM后缀自动机。因为要求是某一个串在原串中不出现,也就是某个串不是原串的子串,所以我们显然要知道做到判定串是否是子串。纵观比较高效的数据结构,也就只有后缀自动机了。我们首先对原串建立自动机,然后利用是01串的性质,对照给出串的每一位,分别dfs每一位是与原来相同,还是不同,相同不需要代价,不相同则需要代价。枚举了下一位的数字就可以顺着自动原创 2018-04-08 20:38:18 · 466 阅读 · 0 评论 -
CSU 1889:Copying DNA 状压+记忆化搜索(KMP?)(2007 NCPC)
第七次多校赛,由于CSU校赛,然后就变成了网络赛,我们一组在本部图书馆的研讨室里面做题,然后那里就成了我们的福地。果然环境很重要吗?参加了那么多次多校赛,这次是最好的一次,A了6题,速度还很快排了第二,虽说题目水,虽说好像有大佬没有来参赛,但是真的还是值得纪念一下的O(∩_∩)O……然后这题在现场我个人感觉需要用到状态压缩,然后队友也说就是一个暴力,但是由于陈述题目的时候理解有误,所以现场并没有敲出来……然后到了场下来做这道题,一方面惊叹暴力算法的博大精深,一方面感叹题目的毒性颇深……原创 2017-04-26 17:11:53 · 762 阅读 · 0 评论 -
CSU 1831 Found(ACM-ICPC Asia Thailand National On-Site Programming Contest 2015)
ACM-ICPC Asia Thailand National On-Site Programming Contest 2015) D题原创 2017-03-17 15:36:02 · 1016 阅读 · 0 评论 -
CSU 1838: Water Pump(ACM-ICPC Asia Thailand National On-Site Programming Contest 2015)
ACM/ICPC 2017湖南多校赛第二场K题,作为负责人的我第一次上台讲题(小激动)……我就按照我ppt的来讲吧……原创 2017-03-14 15:30:33 · 1009 阅读 · 0 评论 -
CodeForces 311B/CSU 1963 Cats Transport/Feed The Rabbit(斜率优化dp)
突然冒出来一道斜率优化的题,我都快忘了……赶紧翻原来写的博客…… 题意也不是很好理解……有n座山,m只猫,每只猫都在固定一座山上,每座山线性排列,告诉你山之间的距离,猫i在某个时刻ti出现,然后总共有p个饲养员,他们从第一座山出发,单位时间走单位距离,而且都是一只往前走不停,每次路过可以把出现的猫领走,然后饲养员出发时间可以不同。问如何安排才能够使得所有猫的总等待时间最少,输出这个时间。不管你有没有题意了,没懂自己再去看题……原创 2017-07-23 09:56:14 · 798 阅读 · 2 评论 -
CSU 1964 Problem_hc(状态压缩dp)
聪神出的题,但这也太直接了吧…… 2017年最后一次湖南多校赛,本来不想打的,发现有一道原题,就直接交了,然后开打,最后拿了第二O(∩_∩)O…… 这题,其实比赛的时候也想到了应该是状压dp但是,留到最后只有20分钟,干脆就吃饭去了……现在看来其实也不是很难,前面的一道模拟题写的慢了点,还是有点可惜。 这题给出n个人的胜负关系,然后要求第一个人和第二个人不能分在同一个半场,要你计算最后一个人获胜的方案数。这题数据范围比较小,最大也才16,可以知道是状态压缩dp原创 2017-07-26 13:20:17 · 405 阅读 · 0 评论 -
CSU 1805 Tree Capitals(Matrix-Tree定理+Best定理)
关于矩阵树定理,在暑假培训的时候hc学长略微提到过,没想到就是去年省赛的题目…… 所谓矩阵树定理,就是指一个图的生成树个数,等于基尔霍夫矩阵的任意n-1阶主子式的行列式的值。而基尔霍夫矩阵K又两个部分构成,一是图的邻接矩阵A,另一个是每个节点的度数矩阵B,如此基尔霍夫矩阵K=B-A。具体证明我就不给出了,自己去查吧,其实我也不知道…… 然后本题有点不同,这题是求欧拉回路的条数。其实差不多,对于欧拉回路的条数,我们有一个Best定理与Matrix-Tree定理类似,不同之处在于原创 2017-08-28 11:05:55 · 477 阅读 · 0 评论 -
CSU 1811 Tree Intersection(线段树+启发式合并 解法)
首先规定 1 号结点为整棵树的根(其它号也可以)。对与每一条边,就看成是某个结点于它的父结点的连边,于是,删掉这条边后两个连同块的共有颜色数,就等价于以这个结点为根的子树里共有颜色数(只有两个连通块,其中一个连通块的“公共颜色”即是两个连同块的公共颜色)。公共颜色是什么呢?假如在其中一个连通块中有 2 个绿色结点,而原树一共有 4 个结点是绿色的,那绿色就是这两个连通块的公共颜色之一;反之,这个连通块有一个黑色结点,而原树也总共只有一个黑色结点,那黑色就是这个连通块“私有”的颜色。转载 2017-08-27 10:22:35 · 594 阅读 · 0 评论 -
CSU 1811 Tree Intersection(Treap启发式合并)
非常气人的一道题目!对拍A了,CSUOJ却报我编译错误! 人生中第一道启发式合并的题目…… 首先,这题题意是给你一棵树,然后每个节点都有一个颜色,然后问你如果从任意边开始截断,把树分为两个颜色的集合,问你交集的大小是多少。相当于就是计算每一条边的贡献。 这题很类似于那道多校的题目,就是求路径上颜色数量,但是这题没有那么麻烦。我们考虑一个子树一个子树的处理。对于一个节点i,它与父亲之间的边的贡献,就是以i为根的子树中颜色数量小于整棵树数量的颜色种数。因为i点只有原创 2017-08-27 11:29:36 · 387 阅读 · 0 评论 -
CSU 1810 Reverse (组合计数)
计数的题目总是受欢迎。 这题题意是可以每次反转一个区间,得到一个数字,然后问你把所有这样不重复的反转之后的数字加起来,结果是多少。 这种题目通常都是计算贡献,但是计算贡献也有好几种方式,这里就是计算每一个位置对最后结果的贡献。注意到,交换两个区间,实际上可能对某些位置不产生影响,所以说我们分成两种情况,一是这个位置还是原本的数字,二是这个位置是别的数字。当这个位置是原本的数字的时候,相当于只需要计算有多少个这样不影响该位置的区间。这个又可以分为两种情况,意识反转区间根本不原创 2017-08-27 16:06:39 · 485 阅读 · 0 评论 -
CSU 1806 Toll(自适应Simpson公式+Dijkstra+priority_queue)
最短路,但是费用随着时间而变化,问最小费用关于时间积分的平均数。 对于求积分,很早的时候大概是大一第一个学期的时候,学Python时候LWW老师就曾经给我们讲过一个叫Simpson公式以及自适应Simpson公式的东西。当时呢学着觉得也没啥用,不就是算个积分吗,用处不大…… 然后这题就是一个计算积分的题目,正好就用到了自适应Simpson公式。所谓Simpon公式,就是指对于函数f(x)在一个区间[l,r]上的积分,可以近似等于(r-l)*(f(l)+f(r)+f(mid)/原创 2017-08-28 11:23:16 · 251 阅读 · 0 评论 -
CSU 1776/BZOJ 4254 Aerial Tramway(树形dp+topsort)
给你n个点,然后每个点有横纵坐标,如果两个点高度相同那么可以建立缆车连接线,但是前提是两点连线之间的点高度必须严格低于他们的高度。给你建立m条缆车路线的任务,问你最多能够使得缆车线路总长度为多少。但是要注意,一定是严格建立m条路线,不能多也不能少,如果建不了那么多则输出-1。最后还有一个限制,任何一个点它上面能够有的缆车路线条数严格小于K。 首先这题很容易往dp方面去想,但是说实话想到树形dp还是不简单的。我们把每一个可以建立的缆车路线想象为一个背包,价值为它的长度,就变成了让你取m个物品,原创 2017-09-01 09:59:54 · 196 阅读 · 0 评论 -
CSU 1808 地铁(Dijkstra变形+构图)
据说是叉姐出的题?! 还是比较有意思的,在普通最短路上加上了一个几号线之间的换乘费用。普通的最短路貌似解决不了了,因为很容易构造出一组数据,在不管几号线的时候的最短路和考虑这些的最短路不同,且点都不一样。那么怎么做呢?原创 2017-07-20 16:24:37 · 570 阅读 · 0 评论 -
CSU 1809 Parenthesis (线段树)
看见括号的题,第一反应就是要把括号变成1和-1。 把左括号看成1,右括号看成-1,然后看前缀和数组是否会出现小于0的,出现则说明中间出现匹配错误,由于题目保证初始时是匹配的,所以最后的总和肯定为0,不去管它。这题的话,每次问你交换两个括号的位置,看是否还是匹配的。那么我们仔细观察一下括号。显然,如果括号位置交换,对于前缀和数组来说,会发生变化的就是两个位置之间的单元(不包括右端点),我们只需要判断之间是否会出现负数。然后如果两个位置的括号相同,那么交换不会发生任何改变。同时如果是左括号在前,原创 2017-07-20 08:42:20 · 313 阅读 · 0 评论 -
CSU 1845:Sensor Network. Link Cut Tree 解法(2010 Southwestern European Regional Contest)
目前为止比得最失败的一场多校赛,所有人的成绩都不好……果然是WF大佬出的题目…… 题目大意:给出很多个点,然后有很多个带权值的边,要求求一棵生成树,使得这棵树中边权值的极差最小,并输出这个极差。 根据贪心的思想,我们首先要想kruskal那样先对所有边按照边权值来排序,排序之后,连续的几条边如果构成生成树,那么这棵生成树的极差就是备选解。即不用考虑非连续的情况,因为非连续情况一定有比他更优的解。这样,我们只需要枚举这个连续的区间了。我们设定一个集合f,边按照从小到大的顺序一次原创 2017-03-21 15:44:10 · 691 阅读 · 0 评论 -
CSU 1848:3-sided dice 高斯消元(2010 Southwestern European Regional Contest)
1848: 3-sided dice Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 42 Solved: 5 Description Just like every fall, the organizers of th原创 2017-03-21 23:45:34 · 517 阅读 · 0 评论 -
2-SAT 问题回顾(CSU 1844)
CSU 1844:Palindromic DNA (2010 Southwestern European Regional Contest)原创 2017-03-30 17:27:15 · 276 阅读 · 0 评论 -
CSU 1842: Fake scoreboard dinic(2010 Southwestern European Regional Contest)
1842: Fake scoreboardSubmit Page Summary Time Limit: 10 Sec Memory Limit: 128 Mb Submitted: 43 Solved: 12 Description As you know, after the award ceremo原创 2017-03-30 21:45:38 · 560 阅读 · 0 评论 -
CSU 1891: Full Tank?(dijkstra+priority_queue or dp?)
1891: Full Tank? Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 57 Solved: 11 DescriptionAfter going through the receipts from your原创 2017-04-27 18:32:55 · 731 阅读 · 0 评论 -
CSU 1919:不醉不归(神奇的dp)
首先,膜石文斌大佬orz…… 此题第一眼望去极像网络流……如果没有再来一瓶的话,直接源点连每个架子的第一瓶酒,然后同一个架子相邻两个酒瓶之间连边,费用为酒瓶质量,流量全部设置为无穷大,最后所有的酒瓶也都连上汇点,流量为1,汇点再连上超级汇点,流量设置为拥有的钱的个数K。这样用流量限制来控制钱,费用来控制质量,跑一边最大费用最大流即可得到所能得到的最大质量。原创 2017-05-10 15:05:13 · 831 阅读 · 2 评论 -
CSU 2131:突然的灵光 (三分法)
一个人群挑系列,战绩居然还不错,A了4题,放在现场也能Rank 3,大佬都没打? 这题的话当时看题懵逼,看着好简单,却不知道怎么下手?看到有人14min就A了,心里挺着急的,还好最后冷静下来,也想到了解法。原创 2017-06-04 21:34:20 · 558 阅读 · 0 评论 -
拓展欧几里得总结(模板)+CSU 1941
六天的暑假结束啦,我终于回归啦…… 第一天,先把之前没做完的题目做完吧。嗯,拓展欧几里得,按理说早就该学的,但是一直拒绝数论…… 首先,拓展之前先说说普通欧几里得算法。就是著名的辗转相除法,几个同余定理。而拓展欧几里得就是利用欧几里得定理求线性方程ax+by=c的通解。要解这个方程的通解,其实一开始是求方程ax+by=gcd(a,b)的解,再转化过去的。求解方程ax+by=gcd的特解就是拓展欧几里得算法的作用,具体原理我就不在这里说了,知道特解后,它的通解形式如下:x=x0原创 2017-07-15 15:52:40 · 382 阅读 · 0 评论 -
CSU 2036 Getting Back Home(分类讨论)
大致题意:给你一棵树,让你从n点出发,你的家在1点。你有一个手电筒,可以照亮范围为k的区域。你沿着树的边走,走到岔路口时,利用手电筒的范围看每一条路是否能看到家或者看到是死路,如果是家,那么直接往家里走;如果是死路,那么不走这个路口;如果不知道,那就随机走一条可以走的路口走。如果走到尽头,那么原路返回。现在问如果最坏情况下你也一定能够走到家,手电筒的照亮范围k最小是多少。 既然要求是最后能够走到家的最小k,那么我们先考虑哪种情况会使得不能到家,也即一直在树里面循环。利用下图来考虑:原创 2018-04-14 09:25:10 · 229 阅读 · 0 评论