C 算法
eckoqzhang
爱熬夜开发的攻城狮
展开
-
猴子选大王
题目大意: 有n只猴子,编号1、2、···n围成一圈,从第一只猴子报数,报到m的猴子离开,然后剩下的猴子接着从1开始报数,直到剩下一只猴子,则剩下的猴子为大王题目分析: 这里围成一圈报数,关键是怎么样模拟出一个圈,用队列可以很好的解决这个问题。先将前所有猴子的编号入队,然后将前m-1只分别出队和入队,在将第m只猴子出队,如此循环,直到剩下最后一只猴子。题目代码:原创 2014-06-17 21:19:34 · 490 阅读 · 0 评论 -
poj1002 487-3279
题目大意: 电话号码用一种能让人记住的方式输入,然后统计号码:有重复的输出号码,并输出重复次数;如果没有重复,则输出Noduplicates. 题目分析: 本来关键在于怎么统计电话号码,用一个大型数组,数组下标表示电话号码,数组内容表示电话号码重复的次数。题目代码:#include#include using namespacestd; int原创 2014-06-17 21:19:40 · 391 阅读 · 0 评论 -
poj 2752 Seek the…
题目大意: 输入一个字符串然后输出所有前缀等于后缀的情况,并以其长度输出来。(字符串自身也是一种情况)题目分析: kmp算法next数组的应用,先求出字符串的next数组,然后j=next[j]进行回溯(j为字符串的长度)。如ababcababababcabab,next[18]=9,整个字符串前缀和后缀相同的值为9,输出;然后前9个字符中寻找前缀等于后缀的情况,输出(nex原创 2014-06-17 21:19:57 · 346 阅读 · 0 评论 -
poj1142 Smith Numbers
题目大意: Smith数是给定一个数,分解成若干质因数,将所有的质因数的每位加起来等于原来给定数的每位加起来的和,则这个数是Smith数(不包含素数),如4937775=3*5*5*65837,且4+9+3+7+7+7+5=42,3+5+5+6+5+8+3+7=42。本题则是输入一个整数,输出与该数相邻的Smith数。 题目分析: 关键是质因数的求解,其次是要区分开素数,因为原创 2014-06-17 21:20:01 · 537 阅读 · 0 评论 -
poj1961 Period
题目大意: 给指定长度N的字符串,然后在2题目分析: kmp算法的应用,kmp算法中的next数组,如果是某个子串循环的,在i的位置,那么next[i]总会等于上一个子串的末尾数值。例如"abababab"编号为12345678,next[8]=6;题目代码:#includeusing namespace std;char a[1000010];int next[原创 2014-06-17 21:19:47 · 558 阅读 · 0 评论 -
poj1988 cube stacking
题目描述: 给n个栈,存取的数据为123···n;现在执行两种操作:(M X Y)为将包含X的栈压入包含Y的栈里;(CX)为输出包含X的栈里,X下面数的个数。题目分析:参考http://blog.sina.com.cn/s/blog_626049050100k57s.html;虽然是并查集,但是还是不是很清楚的思路,关键还是要清楚根节点更新,那么相应的子节点也要相应的更新(路径压原创 2014-06-17 21:19:38 · 442 阅读 · 0 评论 -
poj2503 Babelfish 字典树
题目大意: 输入若干行,每行前一个单词是英语,后一个相对应是其他语言。给定一个其他语言的单词输出其英语形式,若没有则输出eh。题目分析: 关键是字典树的建立,创建一个结构体word里面str存放英语,s存放对应的翻译。在创建字典树的工程中,每个单词的末尾字母节点里存放word数组的下标,查找时返回一个数组的下标,然后通过下标输出对应的翻译就行。题目代码:#include原创 2014-06-17 21:19:59 · 463 阅读 · 0 评论 -
poj1598 Excuses,Excuses!
题目大意: 就是给你一些关键词和一些句子,然后在分别在每个句子中寻找关键词,输出关键词最多的句子,关键词数量相同的句子,都要输出。题目分析: 字符串的输入,在给定的句子中提取一个单词存取到cmp[100]数组中,将提取的单词与关键词调用strcmp函数比较,最后确定下一次偏移量接着提取单词进行比较。题目代码:#include #include using nam原创 2014-06-17 21:19:43 · 512 阅读 · 0 评论 -
poj1035 Spell checker
参考 優YoU http://user.qzone.qq.com/289065406/blog/1309051410字符串通过长度建立一个哈希,在对查找相似单词,巧妙利用长度,操作简单高效,没有传统的改变、增加和删除一个字母,然后重新匹配,而是领用字符串的长度相等和相差一,进行分析,比较不同就行。题目代码#include #include using namespace原创 2014-06-17 21:20:04 · 381 阅读 · 0 评论 -
poj1416
题目大意:给定一个目标数和一个写在纸上将被粉碎的数,被粉碎的意思是将整数进行分割(如123461+2+34+6),求分割后的数加起来小于目标数且最接近目标数,如果分割的方式不止一种,输出rejected;如果目标数和指定的数相同,直接输出;如果目标数小于分割的最小数,输出error;否则,输出最接近目标数的数,并输出分割方式。题目分析:DFS找出最优解每位数一个一个的加入,用一个字符数组原创 2014-06-17 21:19:31 · 429 阅读 · 0 评论 -
插入排序之二分查找
每插入一个数,插入排序移动的步数一定,想要优化算法,可以减少查询的步数,二分查找可以起到一定的优化。 //移的步数不变,查找的步数可能减少#include #define MAXSIZE 100 using namespace std; void insertion_sort(int a[],int n); int binarySearch(int left,int right原创 2014-06-17 21:19:50 · 476 阅读 · 0 评论 -
Rabin-Karp算法的心得体会
本文主要讲的是RK算法中,递推公式的证明: ts+1=(d*(ts-T[s+1]*h)+T[s+m+1])mod q; 参照算法导论,如字符串:314152 (a+b)mod q=(a mod q+b mod q)mod q; (a*b)mod q=(a mod q*b mod q)mod q; (am原创 2014-06-17 21:19:45 · 458 阅读 · 0 评论 -
poj1573 Robot Motion
题目大意:一个机器人进入标记东西南北的图,判断是否能够走出来。题目分析:机器人可能走出来,也可能在图中进入死循环,所以要定义一个数组标记该点是否走过。题目代码:#include //#include using namespace std; int main () { introw,col,start; inti,j; intstep;原创 2014-06-17 21:19:36 · 345 阅读 · 0 评论