摘要: 题目链接:http://poj.org/problem?id=1007 本题属于字符串排序问题。思路很简单,把每行的字符串和该行字符串统计出的字母逆序的总和看成一个结构体。最后把全部行按照这个总和从小到大排序即可。 1 #include 2 #include 3 using namespace std; 4 5 struct DNA 6 { 7 char s[100]; 8 int count; 9 } d[100];10 11 int cmp(DNA a, DNA b)12 {13 return a.count > n >> m)20 {21 ... 阅读全文
posted @ 2013-08-09 21:22 windysai 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1654题意:简单的理解就是,把一个序列中相邻的且是偶数个相同的字符删除,奇数个的话就只保留一个。但是要注意,删除的过程中,可能会导致本来不相邻的相同字符变得相邻了,这时候也要删除。如果直接暴力:每次查看串中是否有相同的相邻字母,如果有就删去,然后继续从前向后查找,这样肯定会超时(O(N^2))。 优化的方法,利用栈的特殊结构O(N),从左向右扫描,判断当前的字符和栈顶元素是否相同,如果相同栈顶元素出栈,否则的话将这一位的元素入栈,这样线性地扫描一遍后,栈中的元素就是剩下的串。要注意输出 阅读全文
posted @ 2013-08-08 16:31 windysai 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://codeforces.com/problemset/problem/328/A 一开始单纯地直接判断给出的序列是等差还是等比,连这一句“You should also print 42 if the next element of progression is not integer” 都直接忽略,因为 Output 中没说,只是描述里讲了(要积累经验啊!!),其实是大错特错!这个题目的关键是,当判断出给定的序列是等比时,求出下一个数(假设为result)是否是小数的判断(等差就没有这个问题,因为都是整数)。这里我采取的办法是把浮点型的result(用来保存待求的下一个 阅读全文
posted @ 2013-08-05 14:10 windysai 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2013 设长度非递减的字串序列为s[1]...s[n]。设计递归子程序print(n),其中n为字串序号,每分析1个字串,n=n-1。 n = 0 为边界。字串s为局部变量: 先输入和输出当前组的第1个字串s,n = n - 1;若n > 0,则输入当前组的第2个字符s,n = n - 1。若n > 0,则通过递归调用print(n)将字串s入栈。回溯过程相当于栈顶字串s出栈,因此直接输出s。 1 #include 2 #include 3 using namespace std; 4 5 void print(int 阅读全文
posted @ 2013-08-01 22:50 windysai 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2739 预处理出所有10001以内的素数,按照递增顺序存入数组prime[1...total]。然后依次处理每个测试数据。采用双重循环计算n的表示数: 外循环i :for (i = 0; x >= prime[i]; i++) 的循环结构枚举所有可能的最小素数prime[i]; 内循环:while (ans =x。若ans = n,则连续素数的和的表示数为sum++,继续外循环。外循环结束后得出的sum即为问题的解。 1 #include 2 using namespace std; 3 4 const int Maxn = 阅读全文
posted @ 2013-08-01 22:23 windysai 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3080该题属于字符串处理中的串模式匹配问题。题目要求我们:给出一个DNA碱基序列,输出最长的相同的碱基子序列。(保证在所有的序列中都有出现) 这里采用了Brute Force算法(由于碱基序列的串长仅为60,规模比较小),这是模式匹配的一种最简单的做法。 设: 最长公共字串为ans,其长度为maxlen。 m个碱基序列为p[0]...p[m-1]。由于公共子序列是每个碱基序列的子串,因此不妨枚举p[0]的每一个可能的子串s。以s为模式,分别以p[1]...p[m-1]为目标进行匹配计算: 若s为p[1]...p[m-1]的... 阅读全文
posted @ 2013-08-01 21:57 windysai 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113题意:输入一个字典,然后再输入若干单词(每行中,1 2 #include 3 #include 4 using namespace std; 5 6 char dic[105][10]; 7 char sorted[105][10]; 8 char word[10]; 9 10 // 字符比较函数11 int cmp_char(const void *_a, const void *_b)12 {13 char *a = (char *)_a;14 char *b = ... 阅读全文
posted @ 2013-07-31 22:02 windysai 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题目1:传话游戏时间限制: 1000ms 内存限制: 256MB描述Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家。由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到的话就与Alice所想的越不同。Bob听到的话往往会变 阅读全文
posted @ 2013-07-31 09:30 windysai 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 又是一道栈的练习,这次也是没有用到STL中的栈来实现。用来保存操作过程的数组(process[])一定要开得足够大(一开始开小了导致wa) 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 10; 7 int main() 8 { 9 char o1[maxn], o2[maxn], stack[maxn]; 10 int i, j, n, a, b, k, pro... 阅读全文
posted @ 2013-07-29 22:41 windysai 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1363题意:有一列火车,车厢编号为1~n,从A方向进站,向B方向出站。现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理。实际上是模拟栈的过程,而栈的特点是先进后出。另外一个麻烦的地方就是输入输出格式问题。本题实现提供两种方法:... 阅读全文
posted @ 2013-07-28 23:54 windysai 阅读(646) 评论(0) 推荐(0) 编辑