随笔分类 - 算法
摘要:KMP算法的核心思想为,当文本串与模式串在某一位置发生失配时,利用已经匹配部分的信息,让模式串迅速向后移动,以完成快速匹配。 <! more 很重要的一点 模式串快速后移多少个单位,或者说失配后,文本串应该继续和模式串中的哪个字符继续比对,也就是常说的next[j]的值,这个值是只与模式串有关,而与
阅读全文
摘要:看数据结构与算法分析Java语言描述的时间复杂度分析时,看到经典的最大子序列和问题,想起来这到以前用C++写过,现在学了Java试一下能不能AC。 PS:不知为什么我前面用System.out.printf()函数一直输出格式错误,交了好几遍都不行,后来改成System.out.println()又
阅读全文
摘要:CF 600B 题目大意:给定n,m,数组a(n个数),数组b(m个数),对每一个数组b中的元素,求数组a中小于等于数组该元素的个数。 解题思路:对数组a进行排序,然后对每一个元素b[i],在数组a中进行二分查找第一个大于b[i]的位置即为结果 /* CF 600B Queries about le
阅读全文
摘要:二分查找前提条件:带查找的数列有序 二分查找,也叫折半查找,它遵循三步法,把原序列分成元素个数尽量接近的两个子序列,然后递归查找。二分查找只适用于有序序列。 时间复杂度:O(logn) 尽管可以递归实现,但二分查找一般写成非递归的。 /* @function:在有序序列A中查找key的位置 @par
阅读全文
摘要:CF 628C 题目大意:给定一个长度为n(n < 10^5)的只含小写字母的字符串,以及一个数d,定义字符的dis--dis(ch1, ch2)为两个字符之差, 两个串的dis为各个位置上字符的dis之和,求和给定的字符串的dis为d的字符串,若含有多个则输出任意一个,不存在输出-1 解题思路:简
阅读全文
摘要:CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整除; 利用这个性质,先特判第一位数字是否能被4整除,可以则++cnt, 之后从第二位数字开始,设当前位为i
阅读全文
摘要:CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m <=n)个人进行比赛,剩余的n-m个人直接晋级, 直至只剩一人为止,问总共需要的水的数量和毛巾的数量
阅读全文
摘要:UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最多能套几个箱子。 第一行输入为n,m,之后是n行m维的箱子 解题思路:嵌套关系是二元关系,因此这题即
阅读全文
摘要:题意描述:有n个矩形,每个矩形可以用两个整数a、b描述,表示它的长和宽, 矩形(a,b)可以嵌套在矩形(c,d)当且仅当a<c且b<d, 要求选出尽量多的矩形排成一排,使得除了最后一个外, 每一个矩形都可以嵌套在下一个矩形内,如果有多解,矩形编号的字典序应尽量小 解题思路:<1>矩形之间的可嵌套关系
阅读全文
摘要:HDU 5234 题目大意:给定n,m,k,以及n*m(n行m列)个数,k为背包容量,从(1,1)开始只能往下走或往右走,求到达(m,n)时能获得的最大价值 解题思路:dp[i][j][k]表示在位置(i,j)有一个容量为k的背包所能获得的最大价值 决策:a[i][j]处的数是否选取 不选取: dp
阅读全文
摘要:UVa 489 题目大意:计算机给定一个单词让你猜,你猜一个字母,若单词中存在你猜测的字母,则会显示出来,否则算出错, 你最多只能出错7次(第6次错还能继续猜,第7次错就算你失败),另注意猜一个已经猜过的单词也算出错, 给定计算机的单词以及猜测序列,判断玩家赢了(You win)、输了(You lo
阅读全文
摘要:UVa 1339 题目大意:给定两个长度相同且不超过100个字符的字符串,判断能否把其中一个字符串重排后,然后对26个字母一一做一个映射,使得两个字符串相同 解题思路:字母可以重排,那么次序便不重要,可以分别统计两个字符串中的各个字母出现的次数,得到两个cnt[26]数组, 又由于可以进行映射,则可
阅读全文
摘要:HDU 1029 题目大意:给定数字n(n <= 999999 且n为奇数 )以及n个数,找出至少出现(n+1)/2次的数 解题思路:n个数遍历过去,可以用一个map(也可以用数组)记录每个数出现的次数, 若次数一旦达到(n+1)/2,即输出a[i] 注意能出现(n+1)/2次数的最多只有一个 /*
阅读全文
摘要:UVa 1225 题目大意:把前n(n<=10000)个整数顺次写在一起,12345678910111213...,数一数0-9各出现多少字 解题思路:用一个cnt数组记录0-9这10个数字出现的次数,先将cnt初始化为0,接着让i从1枚举到n, 对每个i,处理以活的i的每一个位置上的数,并在相应的
阅读全文
摘要:HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交。 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值,其中第i个子序列包括a[j], 则max(dp[m][k]),m<=k<=n 即为所求的结果 <2>初始状态:
阅读全文
摘要:UVa 1586 题目大意:给出一种物质的分子式(不带括号),求分子量。本题中分子式只包含4种原子,分别为C、H、O、N, 原子量分别为12.01,1.008,16.00,14.01 解题思路:先实现一个从字符型的数到整型的数的转换函数,再将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区
阅读全文
摘要:题目大意:给出一个由O和X组成的串(长度为1-80),统计得分。 每个O的分数为目前连续出现的O的个数,例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3 解题思路:用一个变量term记录当前O的分数,若出现O,则term+1,若出现X,则term=0; 再用一个sum记录总和
阅读全文
摘要:UVa 10082 题目大意:把手放在键盘上时,稍微不注意就会往右错一位。这样,输入Q就会变成输入W,输入J会变成输入K等等, 输入一个错位后敲出的字符串(所有字母均大写),输出程序员本来想打的句子。保证输入合法,即一定是错位之后的字符串,例如不会出现大写字母A 解题思路:将键盘上的字符按顺序存在数
阅读全文
摘要:题目大意:在TeX中,左引号是 ``,右引号是 ''。输入一篇包含双引号的文章,你的任务是把他转成TeX的格式 解题思路:水题,定义一个变量标记是左引号还是右引号即可 /* UVa 272 Tex Quotes 水题 */ #include <cstdio> #include <cstring> i
阅读全文
摘要:UVa 1583 题目大意:如果x加上x的各个数字之和得到y,那么称x是y的生成元。 给定数字n,求它的最小生成元 解题思路:可以利用打表的方法,提前计算出以i为生成元的数,设为d,并保存在a[d]中(a[d]=i),反复枚举,若是初次遇到或遇到更小的则更新 相关说明:本来按书上来,在更新数组a时,
阅读全文

浙公网安备 33010602011771号