算法竞赛入门经典 习题与解答
记录习题实现与自己的心得
Dearlingxx
记录自己的成长历程,欢迎一起讨论进步。
展开
-
习题3-1 得分
给出一个由O和X组成的串(长度为1~80),统计每个字符的得分之和。每个O的得分为已经连续出现的O的个数,X得分为0.例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。原创 2024-06-09 18:05:14 · 130 阅读 · 0 评论 -
习题3-2 分子量
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C,H,O,N,原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。通过定义一个map可以快速定位当前元素的分子量是多少,然后通过自己定义i的增加量达到对(字符+数字)和(单字符)结构的识别。原创 2024-06-09 20:42:24 · 205 阅读 · 0 评论 -
习题 3-7 DNA序列 (模板题)
输入整数m和n(4<=m<=50,4<=n<=1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输入到m个序列的Hamming距离和最小的DNA序列和对应的距离。1.将一个存储完毕的map(m)放到vector中:vector<pair<T,T>>brr(m.begin().m.end())。如遍历一个map(m):for(auto x:m) x代表map中的某一个元素也就是某一对键值对,然后通过x.first和x.second可以分别使用每个元素中的键和值。原创 2024-06-10 20:24:45 · 275 阅读 · 0 评论 -
习题3-3数数字
用一个二维矩阵C[n][k]表示前n个数字写在一起k总共出现多少次,总共出现的次数就是C[n+1][k]=C[n][k]+x,其中x为k这个数字在第n+1个数种出现的次数。把前n(n<=10000)个整数按顺序写在一起:123456789101112---数一数0~9各出现多少次(输出10个整数,分别是0,1,...,9出现的次数)。这里又用到了map的遍历,auto x:m中x为一个pair类型:{键,值}。原创 2024-06-09 21:08:36 · 167 阅读 · 0 评论 -
习题 3-10盒子
六个矩形能构成长方体的一个充分必要条件是:能分为三对矩形(每对矩形内部相等,不同对之间可以相等),且所有的边(长和宽)的种类不超过3种。给定6个矩形的长和宽wi和hi(1<=wi,hi<=1000),判断它们能否构成长方体的6个面。原创 2024-06-11 02:43:35 · 216 阅读 · 0 评论 -
习题 3-9子序列(模板题)
输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。原创 2024-06-10 20:39:57 · 203 阅读 · 0 评论 -
习题3-4 周期串
如果一个字符串可以由某个长度为k的字符串重复多次得到,就可以说该串以k为周期。例如,abcabcabcabc以3为周期(注意,他也以6和12为周期)。输入一个长度不超过80的字符串,输出它的最小周期。2.s[i]=s[i%T](下标从i从0开始);然后从1开始枚举T的值纸质满足条件。1.必须可以整除字符串的长度。原创 2024-06-09 21:23:44 · 227 阅读 · 1 评论 -
习题 3-6
接下来要找出所有横向单词(Across)。这些单词必须从一个起始格开始,向右延伸到一个黑格的左边或者整个网格的最右列。这些单词必须从一个起始格开始,向下延伸到一个黑格的上边或者整个网格的最下行。输入一个r行c列(1<=r,c<=10)的网格,黑格用“*”表示,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也有可能出了网格边界),则称这个白格是一个起始格。3.不同层面的逻辑运算符(&&,||)判断必须用小括号将同一层的括起来,避免发生逻辑短路。原创 2024-06-10 19:12:03 · 133 阅读 · 0 评论