07 2019 档案
摘要:题意:给出序列长度n,以及空间m, 由于题意 k*n = m*8 所以 k = m*8/n; num = 2^k 即是 整个序列中不同值的个数 由于ai (1~1e9) ;然后你要把这个序列 的种类个数减小到 num 个 (问最小减小的个数) 思路:范围太大不能用 数组来记录对应个数 , 所以就使用
阅读全文
摘要:题意:一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y ,问这个人能不能安全到达终点(且可以待在原地) m,n,k和d(2 <= m,n <= 100,0 <= k <= 100,m + n <= d <= 10
阅读全文
摘要:题意:给出n个人,以及每个人所对应的工资信息 。 有q次寻问(1<= q<=2e5) {看到这个寻问量就估计到是用线段树} 然后有两种操作: 1 a b 表示把 第 a个人的工资信息变为b , 2 x 表示把所有工资小于 x 的人工资全部更新为 x (这样以来就更加容易看出这就是 区间最大值记录以及
阅读全文
摘要:原题链接 题意:给你一个长为n的序列,以及一个代价公式, 然后求最大的代价: ∑i=lrai−k⌈r−l+1m⌉∑i=lrai−k⌈r−l+1m⌉,一般子序列cost问题肯定会想到dp,那么就要用dp来表示什么状态这道题结合了最大连续子序列和,以及长度对序列cost的影响由于有长度的影响所以要记录的
阅读全文
摘要:题意:给你一个连续序列长度n: 对应序列1,2...,n。在其中选择子序列且保证子序列a[k+1]%a[k]==0 ,即其后一项能后整除前一项,求给定m(序列长度) 对应的 子序列组成个数 ,(1<=m,n<=2000)思路:看到子序列问题,一般容易想到dp(动态规划来做)找到对应的状态, 当前长度
阅读全文
摘要:题意给出多对映射关系 (1~50)多重映射 //注意映射关系有方向,且可以间接映射思路:就是给出每个字母对应的映射关系,我们可以想到用邻接表来存储,在连接完之后在进行一次关联(由于有些映射关系属于间接关系第一次存图没有存完整) 这里直接开邻接矩阵来存,因为所需空间不大 完整题解:
阅读全文
摘要:题意:a个人没有拍子和羽毛球,b个人有拍无球,c个人有球无拍,d个人有球有拍,问不能组成游戏的有多少可能(要组成游戏即是要至少两个拍子以及1个球)思路:我们知道要不能组成游戏即X=0,X=1(拍子数) ;Y=0(球数). 组合下来就是 (X,Y) : (0,0) (0,N) (1,N) (N,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
阅读全文
摘要:题意:有一系列整数。 您的任务是找到满足以下条件的最长子序列: n, m and k. 子序列的最大元素和最小元素之间的差值不小于m且不大于k。 思路:我们可以想到队列这种结构,要保证子序列最长,我们就要保存最大与最小元素的值。同时在每次新增加元素后,如果该队列的最大值减去最小值不符合条件我们就要尽
阅读全文
摘要:题意:给出20个城市与其相邻的3个点,给出起始点,(经过其他所有城市然后回到原处)然后输出所有路径(并且字典序最小)思路: 用dfs来求出路径,然后对应字典序最小就对每个城市连接的城市先排一次顺序 完整代码:
阅读全文
摘要:题意:给出两个人的位置,以及多个KFC位置, 障碍位置求能到达的最近KFC位置思路:两个位置搜索,然后记录到各KFC的时间信息,再选则最近的距离 最后得到的时总和的时间 完整代码:
阅读全文
摘要:题意:还是倒水问题:给出三个瓶子容积为 A,B,C :A =B+C;然后问倒几次才能够使其中两个瓶子中水相同且平分已有的水。一开始A瓶被装满水 思路:像装水这种操作的问题就是模拟,而dfs能够解决最少操作问题(通过记录操作数) 完整代码:
阅读全文
摘要:题意:给一个图,求连通块的个数。(题中是一某点周围8个点均为连通区域) 思路: 这道题就是一道很基础的搜索染色(计数),我一开始用的bfs但是一直MLE,所以就使用消耗空间更少的dfs 完整代码:
阅读全文
摘要:题意:给你两个瓶子,容量为a,b, 然后给你3种操作:(1) FILL()//装满瓶1或者瓶2 (2) DROP() //倒完瓶1或瓶2中的水 (3)POUR(i,j) //将i瓶中的水倒到j瓶中,倒满可以有剩余 思路: bfs,相对于递归的写法我还是更喜欢用队列来写。还是按照bfs的标准,递归边界
阅读全文
摘要:题意:将两个字符串模拟洗牌的操作合并问是否能得打答案,以及中间经过的次数,如果不能则输出-1 思路:这是一道模拟题,所以只需要写一个模拟操作,不断循环即可。同时还要判断循环结束条件(递归结束条件),如果自己手写一个例子的话就会发现其在不超过2*n(n为长度)次数就会洗回来 完整代码:
阅读全文
摘要:题意:给你一个四位数(1000~10000),每次改变使他变为一个素数,问要改变几次才能到所给出的另一个素数值,同时要保证改变次数最小 思路: 先素数打表,然后再bfs搜索(这样便于求出最小次数) 。 bfs搜索可以将当前数字进行改变然后求所得,还有一种办法 看到题解有种比较暴力的匹配(从1000~
阅读全文
摘要:题意:题意给你mxn的01矩阵可以进行翻动某个坐标,但同时会翻动其周围(上下左右的位置),问如何最少次翻动将所有翻转到0 ,并打印出翻转的图像思路:我们可以用dfs来暴力搜索,当然也可以使用状压dp。刚好我也在做状压dp的专题所以参考了别人怎么用状压去写,然而总感觉他们写的是模拟...并且有点注释也
阅读全文
摘要:题意:给定一个字符串,循环移动找到最小(大)字典序下标,以及该串的循环节个数。 思路:循环移动匹配字典序最大,或者循环截取 (TLE). 最后还是投降去看了别人的题解... 然后就是一道 字符串中循环的最小(大)的表示法 题。然后关于循环节个数当然就用next数组来求 完整代码:
阅读全文
摘要:题意:和 POJ-3080 Blue Jeans 基本上一样:求n个串的公共子串,只是数据增大了(字符串长度) 完整代码:
阅读全文
摘要:题意:求出所有串(或者其逆置串)的最长公共子串 思路:不由的想到了 POJ-3080 Blue Jeans 这道题, 其题意是找到所有串的最长公共子串。也是暴力截取(取其中一个串)然后循环匹配(匹配时用kmp取优化) 这里多了一个(匹配其逆置,即将所有的串均逆置存入string数组中来循环匹配即可)
阅读全文
摘要:1.求出T(模板串)对S(原串)的最小完全匹配位置 HDU-1711 Number Sequence (普通kmp) 2.求T(模板串)在S(原串)中出现的次数(可以重复匹配) POJ-3461 Oulipo (kmp修改) 3.求T(模板串)在S(原串)出现的次数(不可重复匹配)HDU-2087
阅读全文
摘要:题意:给出26个字母对应的映射关系,然后给出一行string 其中有密文也有明文,明文部分是不完整的 ,输出可能组成的最短明文思路:先将(假设整个子串为)暗文全部翻译成明文,然后将翻译后的子串与原串相连接,去匹配最长公共前后缀,这是一种思路(但是会超时) 所以换一种思路:我们知道密文的长度至少为n/
阅读全文
摘要:题意:给t个例子,n个值,m个寻问,每次对区间(l,r)进行修改 ,只能将其修改为1,2,3中的一种 思路:对于线段树 区间直接修改 与 区间每项相加 之间是有一些差别的,要理解透 push_down与lazy tag的意义 完整代码:
阅读全文
摘要:题意:T个问题,m为字符串长度,然后输出匹配所有前缀串出现个数之和,其中 mod为 10007 思路:一开始可以想到利用kmp匹配统计子字符串出现次数的模板 (用一个for循环来一个一个匹配)但是字符串长度为(1 <= n <= 200000) 所以for下去肯定会超时,所以我们尝试用dp解决(记录
阅读全文
摘要:题意:给出两个字符串a,b然后 a前缀与b后缀的最长公共部分 并输出 长度。 思路:我们知道next[]数组就是求 某个字符串的最长公共前后缀的,所以就会想到把a,b两个串相连 ,然后再来整体求next[]数组 .当然还要注意下 得到的 长度不能超过 a,b 串本身. 其他:关于字符串输入的问题,加
阅读全文
摘要:这里有一篇写的很好的博客: https://pks-loving.blog.luogu.org/senior-data-structure-qian-tan-xian-duan-shu-segment-tree 在完成kuangbin线段树专题前面两个比较简单的结点修改后,这道题就是一道很标准的线段
阅读全文
摘要:题意:给出N个数,并且有修改第i个数的值,和查询在某个区间的最大值 思路:使用线段树来记录区间的最值,此题还是仅仅对叶子结点的修改,所以即 在HDU-1166 上把 update 和 query 函数进行略微修改即可。 完整代码:
阅读全文
摘要:题意:给N个数,然后给出N个数对应的数值,然后对叶子结点进行add,sub,query操作 输入end时即寻问结束 思路:对于RMQ问题当然使用线段树比较方便,同时这道题也是最简单的线段树(因为只对叶子结点进行修改,而没有对区间进行修改)对结点进行sub(减)操作即使 加入一个相反数 然后这道题主要
阅读全文
摘要:题意:给出一个n x m的矩阵然后矩阵下标(i,j)异或值越大的其单元的值越大, 所有存储的值范围为(1~n m)不重复,问某个矩阵有多少组合形式 思路:如果不考虑其他的方法,单从最简单的方向来看就是打表 完整代码:
阅读全文
摘要:题意:就是给出n点m边,输出排序使并且输出的字典序最小 (注意是这里是输出的序号而不是值). 思路:这类对于拓扑排序字典序最小的问题使用逆向拓扑排序。 完整代码:
阅读全文
摘要:题意:给出字符串长度n,和两个字符串,输出不大于字符串s不小于字符串t的集合的最中间字符串(类似中位数那种)。 思路:我先尝试在想是否是 集合个数除以2 然后加到最小的字符串上去(中位数思想),然后又在找两个字符串中间个数的时发现 集合个数为 (26-'a')*(26-"b)...这种形式 ,所以估
阅读全文
摘要:总结:题很简单,但是要考虑周全(尤其是对于INF的情况) 题意:给定x,y,a,b 表示用x个空瓶子能换一个新的可乐(即包含瓶盖和瓶身),用y个瓶盖能换取一个新可乐,现在你有a个空瓶子以及b个瓶盖,问最多能换取多少瓶可乐(如果能换取无限瓶可乐则输出INF) 思路:题意很简单 我们可以很快得到 a/x
阅读全文
摘要:题意:多测试样例,N个元素(1 <= N <= 1000),每个元素的值为(0<= ai <= 2,000,000,000),这些元素被压入栈中,与栈顶相同的可以一起消除(每次将与top相同的相连必须距离在6以内),问最后是否能将整个栈弹出思路:用dfs来递归寻找可能的方案关于删除操作(一开始想到用
阅读全文
摘要:题意:给一个播音机(背包),然后给你一段播放时间n(容量),每个对应又m 个磁带,每个磁带都有自己的时间(容量),求能播放最长的时间以及输出所选择的磁带(能塞背包的最大体积以及选择的物品),每种磁带只能播放一次; 思路:这便是0/1背包的题(物品只能使用一次),同时与之不同的是要 输出所选择的物品。
阅读全文
摘要:题意;输入数据首先包含一个正整数C,表示有C组测试用例 每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100) 分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20) 分别表示每袋的价格、每袋的重量
阅读全文
摘要:题意:有n元钱,商品的价格在1~k元(每种价格的商品数量无限),用n元去买这些商品,最多有多少种选择? 思路:就是最简单的完全背包 (1 <= N <= 1000),(1 <= K <= 100).也就是说组合数很大 会超出long long范围 对于求完全背包的组合数即从 dp[0] 到dp[n]
阅读全文
摘要:题意:给出三个整数N,M,K 和:sum(a1...ak) =N, 最小公倍数lcm(a1,...,ak)=M, 以及K个数字,求出满足条件的组合可能 (1 ≤ N, M ≤ 1,000, 1 ≤ K ≤ 100) (这道题比较综合,相比昨天做的dp难多了,然后就没做出来.....只能看大佬博客再自
阅读全文
摘要:题意:n种鞋子,m总金额,k品牌数 (1<=N<=100 1 <= M<= 10000 1<=K<=10) 然后对应n个鞋子给出对应的 编号a 金额b 价值c( 1<=a<=k, b and c, 0<=b,c<100000) 思路:事实上对于其他背包的限制,这里在于每种品牌只能取一个 那么我们可以
阅读全文
摘要:题意:找出所给的多个串的相同子串部分 思路:暴力遍历(截取) 其中一个串的部分,然后将其用kmp简化与其他串的匹配 ,用ans来存储最终的答案,如果答案有多个则用 min()来取最小字典序 完整代码:
阅读全文
摘要:题意:给你多组数据,然后给出一个面额n,已知有5种钱币1, 5 ,10 , 25, 50求可以组成n元的可能数 (同时所花费的钱币个数要小于等于100) 思路:从多重背包来理解,即使每个硬币占一个单位空间,有100个空间通过状态转移方程:dp[j][k] += dp[j-v[i]][k-1]; 这里
阅读全文
摘要:题意:给你一个字符串s,输出该字符串的所有的前后缀长度 思路:利用next数组的性质,我们知道next[i]是指子串长为i的最大公共前后缀 所以 next[next[i]] 意味着 在最大公共前后缀 的子串里再去寻找最大公共前后缀子串 这样找的原因是 完整代码:
阅读全文
摘要:题意:给你一个字符串 求他的循环节长度 思路:利用 结论:len%(len - next[len]); 当next[len] == 0 则循环节为 1 完整代码:
阅读全文
摘要:题意:给你一个长度为n的串,输出其存在循环节的子串长度,以及循环节个数 思路:昨天在 HDU-3746 Cyclic Nacklace 上有详细讲到求循环节的原理 ,然后总结一下结论 令 k = len % (len-next[len]) len为字符串的长度 (1)如果next[len] == 0
阅读全文
摘要:题意:给出一个字符串,然后假设其首尾连接,然后求其最小的循环节 思路: 要求循环节,通过运用next数组的含义。已知next数组为在该长度下的最长的相同前后缀长度 然后利用关系式 sum = len - next[len] , sum - len%sum; 然后就是关系式的解释:(关系刚开始理解了很
阅读全文
摘要:题意:给出两个字符串,求其中一个在另一个中出现的次数(不可重复匹配) 思路:由于是不可重复的,所以相对于POJ-3461 (允许重复匹配),kmp的移动要进行修改,此时就将子串的下标置为0重新开始匹配即可 完整代码:
阅读全文
摘要:题意:t个例子,给出两个字符串然后其其中一个串在另一个串中出现的个数 思路:还是利用KMP来进行字符串匹配,然后对其稍微进行修改,在匹配结束后对其进行移动,移动到nex[j] 模板: 完整题解:(cin不加速会超时,也可以换scanf就没有问题)
阅读全文
摘要:题意:给出t个例子,对于每个例子有两个数字序列p,q,长度为n,m 然后对应输入相应个数的数字,范围:[-1000000, 1000000]你求p对q的最小匹配位置 如果没有则输出-1; 思路: 由于是我做的kmp专题第一道题,所以顺便记录一下自己对于kmp学习理解过程: 先尝试使用暴力过题,也就是
阅读全文
摘要:题意:剪刀石头布游戏:n个人(编号0~n-1) m 组数据,其中一个为judge,剩下的分为3组,有的组可能没有人,相同组的人出的手势相同, 其中judge出的姿势可以改变而其他人不能改变。最后判断谁是judge并且给出能判断的最小条件序号。 思路:和POJ-1182 食物链 一样,都是涉及到多个种
阅读全文
摘要:题意: 多组数据输入,每组数据对应n(区间范围1~n) , m个区间关系:给出从a 到 b区间的和为 c ,求判断有几个区间和与之前确立的区间和冲突。 思路: 利用并查集对区间的运用:由于集合与区间性质有很多相似性:比如 交∩ 并∪ ,属于关系等,所以对区间属性的操作,也可以转换为集合上来处理 而在
阅读全文
摘要:这样简单的题做了半个小时,我学会了一个道理,要认真读题.....(漏读了一个同时交换..) 题意:有n个小朋友围成一圈坐,每个人手上分别有 a ,b ,c...个糖果。老师每吹一次哨音,小朋友将手上的糖果拿出一半,交给其右边的人(顺时针),如果交换后有小朋友的手上糖果数为奇数,则老师将再给他一颗糖果
阅读全文
摘要:题意:T个例子,n堆,然后对应 堆的个数 a, b c .... 还是alice先拿再bob ,游戏规则相对Nim博弈有些不一样。这次是将每堆分成两堆,且所分堆的个数必须大于等于1 . 问谁能赢; 思路:根据sg函数结论求值 1.最终局面sg值为0则先手必输 2.所有子游戏的sg值异或后等于原游戏的
阅读全文
摘要:题意: 给出一个很大的数字(很长的字符串),然后将其位数相加 如果大于10则继续相加 直到结果小于10,输出结果 思路: 用string来记录不定长的字符串,然后将其用while()循环处理
阅读全文
摘要:一时水题一时爽,一直水题一直爽(比赛全是打铁场) 题意: 有n个例子,统计颜色出现个数。自然联想到map来映射统计(顺便就当写下map用法) 完整代码:注意一下C++提交可能不能通过要G++才行
阅读全文
摘要:突然发现刷水题魔摸鱼好开心... 题意: 给出一个字符串s,然后对子串进行如下统计 例如:输出连续子串的字母以及个数 思路: 用两个数组来统计,一个统计个数,一个统计字符 Sample Input 2 ABC ABBCCC Sample Output ABC A2B3C 完整代码: #include
阅读全文
摘要:Input The input consists of a number of cases. Each case starts with a line specifying the integers n and m. The next m lines each consists of two int
阅读全文
摘要:输入输出格式: input * Line 1: A single integer, P * Lines 2..P+1: Each of these lines describes a legal operation. Line 2 describes the first operation, etc
阅读全文
摘要:Input The first line contains two integers N and d (1 <= N <= 1001, 0 <= d <= 20000). Here N is the number of computers, which are numbered from 1 to
阅读全文
摘要:题意:给出两个很大的数A,B求和(这里最大位数为1000) 思路:对于很大的数相加,就不能往开int数据类型大小了,试着用char[]或者int[]来存储数位。然后将每一位相加,大于10则进位 完整代码:
阅读全文
摘要:题意:已知某昆虫有雄雌两性,然后给出案例数t, 对应每一个案例中给出编号数目和关系数目n,m ,在接下来m行中给出对应关系为异性的a b,最后判断所给中关系中是否有冲突部分 思路:关于种类并查集,有两种思路 (1) 开对应集合数量倍空间,类似POJ-1703也是两个互斥关系的集合: 有n个成员,开两
阅读全文