
算法竞赛入门
文章平均质量分 71
Goto谷歌
偏见源自于无知
展开
-
查找算法之二分查找
二分查找的代码如下:#include #include using namespace std;long BinarySearch(int a[], int begin, int end, int elem){ if(begin > end) return -1; int mid = (begin + end) / 2; //int mid = begin + (end -原创 2015-01-07 09:28:37 · 462 阅读 · 0 评论 -
小算法:一个排名区间,对应一个奖品,给定一个排名区间,判断它要领取奖品的id
vector<int> m_vRankRegion;m_vRankRegion.push_back(1);//1 - 1m_vRankRegion.push_back(1);//2 - 2m_vRankRegion.push_back(1);//3 - 3m_vRankRegion.push_back(1);//4 - 4m_vRankRegion.push_back(1);//5 - 5原创 2015-09-07 20:16:05 · 494 阅读 · 0 评论 -
Abbott 的复仇(Abbott's Revenge,ACM|IPPC World Finals 2000, UVa 816)
代码如下:#include #include using namespace std;//const char * dirs = "NESW";//const char * turns = "FLR";const int N = 0, E = 1, S = 2, W = 3;const int F = 0, L = 1, R = 2;//分别表示N(上),E(右),S(下),原创 2015-01-25 15:37:40 · 2236 阅读 · 0 评论 -
图的入门之的深度遍历
PS:终于开始图的学习之旅了,先来个开胃小菜,图的深度遍历,个人代码如下:#include#includeusing namespace std;void dfs(char a[][5], int row, int col, int r, int c, const char tag = '#'){ if(r row - 1 || c col - 1) return; if(t原创 2015-01-16 22:04:11 · 505 阅读 · 0 评论 -
链表反转
个人代码如下:#include using namespace std;typedef struct STNode{ int data; struct STNode *next;}Node;void CreateList(Node *&Root, int len){ Node *pNewNode = NULL; for(int i = 0; i < len; ++i)原创 2015-01-21 23:07:51 · 442 阅读 · 0 评论 -
两个队列模拟一个栈
思路就是两个队列切换来切换去。个人代码如下:#include #include using namespace std;class CStack{public: void pop(); int top(); void push(int elem); void Move(queue &des, queue &sour, int begin, int end); CSta原创 2015-02-09 19:13:12 · 460 阅读 · 0 评论 -
编写一个单词反转,字符不反转的函数。
如题:规则如下输入:im a bad student输出:student bad a im方法1:不借助辅助的空间#include #include using namespace std;void ReverseWord(char a[], int begin, int end){ for(; begin < end; ++begin, --end) swap(a原创 2015-01-17 20:24:46 · 596 阅读 · 0 评论 -
求第n个斐波那契数的值(递归和非递归解法)
个人代码如下:(1)递归:long long Fbl(int n){ if(n == 1 || n == 2) return 1; return Fbl(n-2) + Fbl(n-1);}int main(){ //1 1 2 3 5 8 cout<< Fbl(4); return 0;}(2)非递归:long long Fbl(int n){ if原创 2015-01-17 19:42:41 · 675 阅读 · 0 评论 -
排序算法之快速排序
快速排序的代码如下:#include #include using namespace std;int SortByOnce(int a[], int begin, int end);void QuickSort(int a[], int begin, int end);bool CheckResultIsRight(int a[], int len);int main(){原创 2014-12-28 14:59:56 · 404 阅读 · 0 评论 -
二分查找之天平称重,称出最重的小球
题目:有n个小球,其中有一个比其他的都要重,已知有一个天平,怎么用最少的次数把小球找出来?个人代码如下:#include #include using namespace std;int GetAbnormalBall(int a[], int begin, int end, int &count){ if(begin == end) return a[begin];原创 2015-01-16 21:37:04 · 1550 阅读 · 0 评论 -
破损的键盘(Broken KeyBoard)Uva 11988
样例输入:This_is_a_[Beiju]_text[[]][][]Happy_Birthday_to_Tsinghua_University样例输出:BeijuThis_is_a_textHappy_Birthday_to_Tsinghua_University静态链表的实现:(用结构体数组模拟链表)#include using namespace原创 2014-12-21 14:46:38 · 677 阅读 · 0 评论 -
天平 (Not so Mobile, UVa 839)
题意:输入一个树状天平,根据力矩相等的原则判断是否平衡。就是W1D1= W2D2,其中W1,W2分别为左右两边砝码的重量,D为距离。示意图如下:个人代码如下:#include using namespace std;#define IsLeaf(w1, w2) ((w1) && (w2))bool solve(int &w){ int W1, L1, W2, L2;原创 2015-01-08 10:53:03 · 544 阅读 · 0 评论 -
排序算法之堆排序
堆排序的算法如下:#include using namespace std;void AdjustHeap(int a[], int begin, int end, int pos){ int lchild = 2 * pos - begin + 1; int rchild = 2 * pos - begin + 2; int TracePos = -1; if(lchild原创 2015-01-06 21:57:54 · 455 阅读 · 0 评论 -
排序算法之归并排序
归并排序代码如下:#include using namespace std;void MergeArray(int a[], int begin1, int end1, int begin2, int end2){ int begin = begin1; const int len = end2 - begin1 + 1; int b[len]; int pos = 0; w原创 2015-01-07 09:55:54 · 431 阅读 · 0 评论 -
图求最短路径
class DeepTrace{public: void InitMap(const vector<vector<int> > vMap, const int &portNum) { m_map = vMap; m_portNum = portNum; m_traceTree.clear(); } bool GetRu原创 2015-09-17 18:06:43 · 474 阅读 · 0 评论