随笔分类 -  2019ACM暑期集训

摘要:原题链接 题意:给你一个长为n的序列,以及一个代价公式, 然后求最大的代价: ∑i=lrai−k⌈r−l+1m⌉∑i=lrai−k⌈r−l+1m⌉,一般子序列cost问题肯定会想到dp,那么就要用dp来表示什么状态这道题结合了最大连续子序列和,以及长度对序列cost的影响由于有长度的影响所以要记录的 阅读全文
posted @ 2019-07-31 16:02 Tianwell 阅读(137) 评论(0) 推荐(0)
摘要:题意:给你一个连续序列长度n: 对应序列1,2...,n。在其中选择子序列且保证子序列a[k+1]%a[k]==0 ,即其后一项能后整除前一项,求给定m(序列长度) 对应的 子序列组成个数 ,(1<=m,n<=2000)思路:看到子序列问题,一般容易想到dp(动态规划来做)找到对应的状态, 当前长度 阅读全文
posted @ 2019-07-31 10:37 Tianwell 阅读(164) 评论(0) 推荐(0)
摘要:题意给出多对映射关系 (1~50)多重映射 //注意映射关系有方向,且可以间接映射思路:就是给出每个字母对应的映射关系,我们可以想到用邻接表来存储,在连接完之后在进行一次关联(由于有些映射关系属于间接关系第一次存图没有存完整) 这里直接开邻接矩阵来存,因为所需空间不大 完整题解: 阅读全文
posted @ 2019-07-31 09:49 Tianwell 阅读(169) 评论(0) 推荐(0)
摘要:题意:a个人没有拍子和羽毛球,b个人有拍无球,c个人有球无拍,d个人有球有拍,问不能组成游戏的有多少可能(要组成游戏即是要至少两个拍子以及1个球)思路:我们知道要不能组成游戏即X=0,X=1(拍子数) ;Y=0(球数). 组合下来就是 (X,Y) : (0,0) (0,N) (1,N) (N,0) 阅读全文
posted @ 2019-07-30 20:16 Tianwell 阅读(152) 评论(0) 推荐(0)
摘要:给定一个升序的序列,然后将其分为k组连续子序列。求 k组{max(i)-min(i)}的最小和 (i代表被分割的第i组)思路:这道题 我们先试着枚举分析 例如 1 8 9 10 分为 两组 就会发现 1 | 8 9 10 (10-8+1-1 )==(10-1-(8-1)), 1 8 |9 10 (1 阅读全文
posted @ 2019-07-30 11:42 Tianwell 阅读(166) 评论(0) 推荐(0)
摘要:题意:有一系列整数。 您的任务是找到满足以下条件的最长子序列: n, m and k. 子序列的最大元素和最小元素之间的差值不小于m且不大于k。 思路:我们可以想到队列这种结构,要保证子序列最长,我们就要保存最大与最小元素的值。同时在每次新增加元素后,如果该队列的最大值减去最小值不符合条件我们就要尽 阅读全文
posted @ 2019-07-29 19:55 Tianwell 阅读(170) 评论(0) 推荐(0)
摘要:题意:给出20个城市与其相邻的3个点,给出起始点,(经过其他所有城市然后回到原处)然后输出所有路径(并且字典序最小)思路: 用dfs来求出路径,然后对应字典序最小就对每个城市连接的城市先排一次顺序 完整代码: 阅读全文
posted @ 2019-07-29 18:14 Tianwell 阅读(145) 评论(0) 推荐(0)
摘要:题意:还是倒水问题:给出三个瓶子容积为 A,B,C :A =B+C;然后问倒几次才能够使其中两个瓶子中水相同且平分已有的水。一开始A瓶被装满水 思路:像装水这种操作的问题就是模拟,而dfs能够解决最少操作问题(通过记录操作数) 完整代码: 阅读全文
posted @ 2019-07-29 13:09 Tianwell 阅读(119) 评论(0) 推荐(0)
摘要:题意:给一个图,求连通块的个数。(题中是一某点周围8个点均为连通区域) 思路: 这道题就是一道很基础的搜索染色(计数),我一开始用的bfs但是一直MLE,所以就使用消耗空间更少的dfs 完整代码: 阅读全文
posted @ 2019-07-29 11:41 Tianwell 阅读(100) 评论(0) 推荐(0)
摘要:题意:给你两个瓶子,容量为a,b, 然后给你3种操作:(1) FILL()//装满瓶1或者瓶2 (2) DROP() //倒完瓶1或瓶2中的水 (3)POUR(i,j) //将i瓶中的水倒到j瓶中,倒满可以有剩余 思路: bfs,相对于递归的写法我还是更喜欢用队列来写。还是按照bfs的标准,递归边界 阅读全文
posted @ 2019-07-28 20:58 Tianwell 阅读(151) 评论(0) 推荐(0)
摘要:题意:将两个字符串模拟洗牌的操作合并问是否能得打答案,以及中间经过的次数,如果不能则输出-1 思路:这是一道模拟题,所以只需要写一个模拟操作,不断循环即可。同时还要判断循环结束条件(递归结束条件),如果自己手写一个例子的话就会发现其在不超过2*n(n为长度)次数就会洗回来 完整代码: 阅读全文
posted @ 2019-07-28 15:11 Tianwell 阅读(182) 评论(0) 推荐(0)
摘要:题意:给你一个四位数(1000~10000),每次改变使他变为一个素数,问要改变几次才能到所给出的另一个素数值,同时要保证改变次数最小 思路: 先素数打表,然后再bfs搜索(这样便于求出最小次数) 。 bfs搜索可以将当前数字进行改变然后求所得,还有一种办法 看到题解有种比较暴力的匹配(从1000~ 阅读全文
posted @ 2019-07-27 16:26 Tianwell 阅读(160) 评论(0) 推荐(0)
摘要:题意:题意给你mxn的01矩阵可以进行翻动某个坐标,但同时会翻动其周围(上下左右的位置),问如何最少次翻动将所有翻转到0 ,并打印出翻转的图像思路:我们可以用dfs来暴力搜索,当然也可以使用状压dp。刚好我也在做状压dp的专题所以参考了别人怎么用状压去写,然而总感觉他们写的是模拟...并且有点注释也 阅读全文
posted @ 2019-07-27 10:33 Tianwell 阅读(166) 评论(0) 推荐(0)
摘要:题意:给定一个字符串,循环移动找到最小(大)字典序下标,以及该串的循环节个数。 思路:循环移动匹配字典序最大,或者循环截取 (TLE). 最后还是投降去看了别人的题解... 然后就是一道 字符串中循环的最小(大)的表示法 题。然后关于循环节个数当然就用next数组来求 完整代码: 阅读全文
posted @ 2019-07-26 17:41 Tianwell 阅读(220) 评论(0) 推荐(0)
摘要:题意:和 POJ-3080 Blue Jeans 基本上一样:求n个串的公共子串,只是数据增大了(字符串长度) 完整代码: 阅读全文
posted @ 2019-07-26 15:58 Tianwell 阅读(171) 评论(0) 推荐(0)
摘要:题意:求出所有串(或者其逆置串)的最长公共子串 思路:不由的想到了 POJ-3080 Blue Jeans 这道题, 其题意是找到所有串的最长公共子串。也是暴力截取(取其中一个串)然后循环匹配(匹配时用kmp取优化) 这里多了一个(匹配其逆置,即将所有的串均逆置存入string数组中来循环匹配即可) 阅读全文
posted @ 2019-07-26 14:43 Tianwell 阅读(198) 评论(0) 推荐(0)
摘要:1.求出T(模板串)对S(原串)的最小完全匹配位置 HDU-1711 Number Sequence (普通kmp) 2.求T(模板串)在S(原串)中出现的次数(可以重复匹配) POJ-3461 Oulipo (kmp修改) 3.求T(模板串)在S(原串)出现的次数(不可重复匹配)HDU-2087 阅读全文
posted @ 2019-07-26 11:49 Tianwell 阅读(220) 评论(0) 推荐(0)
摘要:题意:给出26个字母对应的映射关系,然后给出一行string 其中有密文也有明文,明文部分是不完整的 ,输出可能组成的最短明文思路:先将(假设整个子串为)暗文全部翻译成明文,然后将翻译后的子串与原串相连接,去匹配最长公共前后缀,这是一种思路(但是会超时) 所以换一种思路:我们知道密文的长度至少为n/ 阅读全文
posted @ 2019-07-26 11:00 Tianwell 阅读(159) 评论(0) 推荐(0)
摘要:题意:给t个例子,n个值,m个寻问,每次对区间(l,r)进行修改 ,只能将其修改为1,2,3中的一种 思路:对于线段树 区间直接修改 与 区间每项相加 之间是有一些差别的,要理解透 push_down与lazy tag的意义 完整代码: 阅读全文
posted @ 2019-07-25 17:53 Tianwell 阅读(193) 评论(0) 推荐(0)
摘要:题意:给出两个字符串a,b然后 a前缀与b后缀的最长公共部分 并输出 长度。 思路:我们知道next[]数组就是求 某个字符串的最长公共前后缀的,所以就会想到把a,b两个串相连 ,然后再来整体求next[]数组 .当然还要注意下 得到的 长度不能超过 a,b 串本身. 其他:关于字符串输入的问题,加 阅读全文
posted @ 2019-07-24 20:15 Tianwell 阅读(174) 评论(0) 推荐(0)