随笔分类 -  ACM_数据结构

摘要:题意:给你一个n*n (n<=200)的字符串矩阵,问你每行每列都是回文串的最大的m*m的矩阵是多少 题解:首先答案不满足单调性,即m成立而m-1与m+1都却不一定成立,所以必须枚举答案确定现在的值是否成立,从大到小枚举就好 当枚举值为k时就转换为判断k是否为所求矩阵,判断时我们需要枚举每个点,(看 阅读全文
posted @ 2017-01-04 22:55 专注如一 阅读(337) 评论(0) 推荐(0) 编辑
摘要:题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号最小的城市 输入数据保证正确,每次添加与删除的城市一定是与首都相连的 题解:每次都只需要知道最远且编 阅读全文
posted @ 2016-12-25 19:47 专注如一 阅读(263) 评论(0) 推荐(0) 编辑
摘要:题意:CS召唤了n个实验怪兽,第i号怪兽在i这个位置出。并把KI召唤出的第i位从者安排在pos(i)处,总共有m位从者。 第i只怪兽有战斗力atk(i), 而i号从者的体力为AP(i)。如果从者想要移动,他必须战胜他当前位置处的怪兽,战胜的条件为AP>=atk, 然后该从者的AP会减少atk, 注意 阅读全文
posted @ 2016-11-24 02:32 专注如一 阅读(226) 评论(0) 推荐(0) 编辑
摘要:题意: 题解:典型伸展树的题,比较全面。 我理解的伸展树: 1 伸展操作:就是旋转,因为我们只需保证二叉树中序遍历的结果不变,所以我们可以旋转来保持树的平衡,且旋转有左旋与右旋。通过这种方式保证不会让树一直退化从而超时。虽然一次旋转的代价比较高,但是可以证明:每次操作都旋转(关键),则时间复杂度为O 阅读全文
posted @ 2016-10-26 03:03 专注如一 阅读(256) 评论(0) 推荐(0) 编辑
摘要:题意:在区间中找一个数,求出该区间每个数与这个数距离的总和,使其最小 找的数字是中位数(若是偶数个,则中间随便哪个都可)接着找到该区间比此数大的数的总和 区间中位数可以使用划分树,然后在其中记录:每层的 1-i 中划分到左区间的总和 划分树: 划分树是一种基于线段树的数据结构。主要用于快速求出(在l 阅读全文
posted @ 2016-10-10 20:54 专注如一 阅读(279) 评论(0) 推荐(0) 编辑
摘要:题意:找n个数中无修改的区间不同数个数 题解:使用主席树在线做,我们不能使用权值线段树建主席树 我们需要这么想:从左向右添加一到主席树上,添加的是该数字处在的位置 但是如果该数字前面出现过,就在此版本的主席树上的前面出现的位置减一,接着才在此位置上添一 这样查找是按照右区间版本的主席树来找(lef, 阅读全文
posted @ 2016-10-07 21:08 专注如一 阅读(3140) 评论(0) 推荐(0) 编辑
摘要:题意:首先给你n个数,开始时间为0,最后按照操作输出 给你四种操作: 1. C l r d : 在(l,r)区间都加上d,时间加一2. Q l r : 询问现在(l,r)的区间和3. H l r t : 询问在t的时间(l,r)的区间和4. B t : 直接回到t的时间 题解:首先是区间修改区间查询 阅读全文
posted @ 2016-10-06 13:52 专注如一 阅读(971) 评论(0) 推荐(0) 编辑
摘要:首先来介绍一下我们需求:给你n个数,多次问你某个区间内的第k小是哪个数 主席树: 主席树的全名应该是 函数式版本的线段树。加上附带的一堆 technology。。 。。总之由于原名字太长了,而且 “主席” 两个字念起来冷艳高贵,以后全部称之为主席树好了。。 主席树的主体是线段树,准确的说,是很多棵线 阅读全文
posted @ 2016-10-04 23:58 专注如一 阅读(264) 评论(0) 推荐(0) 编辑
摘要:题意:给你一些长方体,问你覆盖三次及以上的体积有多大 首先我们观察x轴y轴一样很大,但是z轴很小,所以我们可以枚举z轴(-500,500),注意我们枚举的是每一段长度为一的z轴的xy轴的面积而不是点。接着就是求在这一段内的矩形面积并的变形 注意我们要首先计算,再插入线段求面积并 阅读全文
posted @ 2016-09-27 23:12 专注如一 阅读(173) 评论(0) 推荐(0) 编辑
摘要:题意:给你k个数Si,然后给你一个等式 H= ∑ Si ∗ (K − i)! (i=(1->k)且0 ≤ Si ≤ K − i). 叫你求出第H个全排列 其实这是一个康托展开:X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! ,其中a[i 阅读全文
posted @ 2016-09-27 02:04 专注如一 阅读(220) 评论(0) 推荐(0) 编辑
摘要:题意:给你n盘歌碟按照(1....n)从上到下放,接着m个询问,每一次拿出x碟,输出x上方有多少碟并将此碟放到开头 直接想其实就是一线段的区间更新,单点求值,但是根据题意我们可以这样想 首先我们倒着存 n--1,接着每次询问时把放碟子放到最后,这样我们要开一个映射数组映射每个碟子在哪个位置 其中我们 阅读全文
posted @ 2016-09-27 00:38 专注如一 阅读(262) 评论(0) 推荐(0) 编辑
摘要:题意:给你一串数且每个数都不同,问你(x,y,z)出现 x<z<y 的总次数 首先我们直接想的话不能使用O(n*log2 n)解决,所以可以正难则反 可以求得x<(y,z)的值,减去的x<y<z就好了 x<(y,z):每一位后面比此大的个数V,使用V*(V-1)/2求 x<y<z:前面POJ 392 阅读全文
posted @ 2016-09-26 20:57 专注如一 阅读(245) 评论(0) 推荐(0) 编辑
摘要:题意:给你n袋豆子,每袋都有w[i]个豆子,接着任选连续任意个袋子的豆子合在一起放入容量为p的多个袋子里(每个袋子必须放满),问剩余的豆子数<=k时,能放满最多的袋子的个数 题解:个数与p都比较大,直接模拟O(n^2),余数处理(dp)O(n*p)都会超时。 我们可以首先抽象出一个公式来:设前缀和为 阅读全文
posted @ 2016-09-26 12:52 专注如一 阅读(441) 评论(0) 推荐(0) 编辑
摘要:此题测试时预处理等了很久,结果470ms过了。。。。。。 题意:开始不怎么懂,结果发现是这个: 波兰裔美国数学家斯塔尼斯拉夫·乌拉姆(Stanislaw Ulam)在20世纪50年代中期开发出了另一种筛法:从正整数序列开始,先将数列中的第2n个数(偶数)删除,只留下奇数;这样剩下的数列中第二项是3, 阅读全文
posted @ 2016-09-23 20:52 专注如一 阅读(237) 评论(0) 推荐(0) 编辑
摘要:题意:给你n棵树,每棵树上有两个权值X H 对于X离散化 :3 7 1 5 3 6 -> 2 6 1 4 2 5,对于H一样 然后F = abs(X1-X2) S=min(H1,H2) 求出每一对F*S的总和 可以看到一边是求每个数与其他数的最小值,一边是求每个数与其他数的差距。因此我们可以排序一边 阅读全文
posted @ 2016-09-22 23:36 专注如一 阅读(261) 评论(0) 推荐(0) 编辑
摘要:题意:给你n个点,m条边,包括有向边与无向边,每条边都有一个权值。在每个点上都有一个人,他可以走与这个点直接相连的所有边中任意一条边一次,并且得到这个权值,就不能走了,注意这条路也只能被一个人走。问最大的权值和是多少 首先我们可以想到每个点直接走与其相连权值最大的可以走的点,不一定是最优的,因为可能 阅读全文
posted @ 2016-09-22 21:59 专注如一 阅读(175) 评论(0) 推荐(0) 编辑
摘要:题意:给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,lxh总是先移动 ,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜 比较有意思的一个题,想到的话就是经典带权并查集了。我们可以这样想:谁先抢到两个点的最近公共祖先,谁就赢了。因此我 阅读全文
posted @ 2016-09-22 19:29 专注如一 阅读(257) 评论(0) 推荐(0) 编辑
摘要:感觉做得有点复杂了,但是AC了还是。。。爽。。。 题意:给你n个点每个点有一个价值,接下来有m条边,然后是q个操作,每个操作有三种情况: F X K:寻找与X点直接或间接相连的不小于价值K的最小价值,如果找不到就是0 U X K:将X点价值变为K E A B:删除点A与点B形成的边 最后求价值总和的 阅读全文
posted @ 2016-09-22 01:55 专注如一 阅读(229) 评论(0) 推荐(0) 编辑
摘要:特别经典的一个题,还有一种方法就是二分+bfs 题意:空间内n*m个点,每个点是0或者1,0代表此点可以走,1代表不能走。接着经过q年,每年一个坐标表示此点不能走。问哪年开始图上不能出现最上边不能到达最下边的情况了 图上连通性可以使用并查集判断,但是并查集不善于删边,却善于添边。所以我们倒着来想就是 阅读全文
posted @ 2016-09-21 20:45 专注如一 阅读(195) 评论(0) 推荐(0) 编辑
摘要:很好的一个题,思想特别6 题意:给你小写字母个数n,每个字母可以向上翻动,例如:d->c,a->z。然后给你m对数(L,R)(L<=R),表示[L,R]之间可以同时向上翻动,且翻动后是相同的类型。问你最后可以出现多少种不同的类型。 例如:abcabc只给你[1,3],那么abcabc==zababc 阅读全文
posted @ 2016-09-20 21:18 专注如一 阅读(312) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示