![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Online Judge
文章平均质量分 60
埋头
这个作者很懒,什么都没留下…
展开
-
KMP算法解决字符串匹配
该算法由D.E.Knuth ,J.H.Morris和 V.R.Pratt提出,用于解决字符串匹配问题。思想:设目标串(主串)为s,模式串为t ,并设i指针和j指针分别指示目标串和模式串中正待比较的字符,设i和j的初值均为0。若有s[i]=t[j],则i和j分别加1。否则,i不变,j退回到j=next[j-1]的位置,再比较s[i]和t[j],若相等,则i和j分别加1。否则,i不变,j再次退回到j=n原创 2015-08-27 20:47:00 · 1442 阅读 · 0 评论 -
uva 10300 - Ecological Premium
#include using namespace std;int main(){ int n, f, sqr, ani, env,i,j, sum; cin >> n; for (i = 0; i < n; i++) { sum = 0; cin >> f; for (j = 0; j < f; j++) { cin >> sqr >> ani >> env原创 2015-01-02 19:54:04 · 830 阅读 · 0 评论 -
生成可重集的排列
自己重写的下一个排列函数#include #include using namespace std;#define N 100000int p[N];int _next_permutation(int *first, int *last){ int *p,*q; for (p = last; p != first; p--) { if (*p > *(p - 1))原创 2015-01-03 17:04:16 · 665 阅读 · 0 评论 -
集合的子集生成(无重复元素)
1:增量构造法#include #include using namespace std;#define N 100000int p[N];int a[N];//子集生成void print_subset(int n, int *p, int *a ,int cur,int index){ if (cur != 0) { for (int i = 0; i <原创 2015-01-04 15:49:54 · 805 阅读 · 0 评论 -
回溯法解决八皇后问题
回溯法:全排列并进行剪枝#include #include using namespace std;#define N 100000int C[N];int tot;int visited[3][N];//列访问,副对角线访问,主对角线访问//八皇后问题void search(int n, int cur){ if (cur == n) tot++; else f原创 2015-01-04 21:44:58 · 609 阅读 · 0 评论 -
回溯法解决素数环问题
#include #include using namespace std;#define N 100000int isp[2 * N];int a[N];int visited[N];int is_prime(int n){ int i; int flag = 0; for (i = 2; i <= (int)sqrt(n) + 1;i++) { if (n%i原创 2015-01-04 23:39:47 · 2802 阅读 · 1 评论 -
hiho #1066并查集问题
#1066 : 无间道之并查集时间限制:20000ms单点时限:1000ms内存限制:256MB描述这天天气晴朗、阳光明媚、鸟语花香,空气中弥漫着春天的气息……额,说远了,总之,小Hi和小Ho决定趁着这朗朗春光出去玩。但是刚刚离开居住的宾馆不久,抄近道不小心走入了一条偏僻小道的小Hi和小Ho就发现自己的前方走来了几个彪形大汉,定睛一看还都是地地道道的黑人兄弟!小Hi原创 2015-01-08 12:51:35 · 877 阅读 · 0 评论 -
hiho一下 第二十七周:最小生成树二·Kruscal算法
时间限制:10000ms单点时限:1000ms内存限制:256MB描述随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了——但是幸运的是,经过计算机的分析,小Hi已经筛选出了一些比较适合建造道路的路线,这个数量并没有特别的大。所以问题变成了——小Hi现在手上拥有N座城市,且已知其中一些城市间建造道路的费用,小Hi希望知道,最少花费多少就可以使得任原创 2015-01-08 12:58:00 · 749 阅读 · 0 评论 -
八数码问题
利用哈希表来查重广度优先来取得最少步数参考再论八数码文章对八数码问题有无解的讨论下面是八数码实现代码#include#include#includeusing namespace std;#define M 1000000typedef int state[9];int st[M][9];int goal[9];int dist[M];//set vis;const in原创 2015-01-12 20:00:24 · 838 阅读 · 0 评论 -
10071 - Back to High School Physics
#include using namespace std;int main(){ int v, t; while (cin >> v >> t) { cout <<( v * t * 2 ) << endl; } return 0;}原创 2015-01-02 17:10:49 · 667 阅读 · 0 评论 -
uva 10055 Hashmat the Brave Warrior
被这样一道题给虐了。。。#include int main(){ long long soldier_nr, opponent_nr,differ; while (scanf("%lld%lld", &soldier_nr, &opponent_nr) == 2) { printf("%lld\n", opponent_nr - soldier_nr > 0 ? opponen原创 2015-01-02 16:40:16 · 735 阅读 · 0 评论 -
#1014 : Trie树
http://hihocoder.com/problemset/problem/1014#include #include #define MAX 26typedef struct TNode{int count;struct TNode *head;struct TNode *tail;struct TNode *next;char value原创 2014-12-19 11:24:50 · 602 阅读 · 0 评论 -
leetcode263_264:Ugly Number & Ugly Number II
Ugly NumberWrite a program to check whether a given number is an ugly number.Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly原创 2015-08-24 19:56:43 · 674 阅读 · 0 评论 -
leetcode268:Missing Number
方法一:时间复杂度O(n),空间复杂度O(n/32) 传统方法, 同时使用位运算压缩空间(int型32位标记32个数字)class Solution {public: int missingNumber(vector<int>& nums) { int n = nums.size() + 1; int c = (n >> 5) + 1; i原创 2015-08-24 10:52:36 · 692 阅读 · 0 评论 -
leetcode085_221:Maximal Rectangle&Maximal Square
题目描述Maximal Rectangle: Given a 2D binary matrix filled with 0’s and 1’s, find the largest rectangle containing all ones and return its area.Maximal Square Given a 2D binary matrix filled with 0’s a原创 2015-06-30 11:41:32 · 564 阅读 · 0 评论 -
最近公共祖先(LCA):离线&在线算法
Tarjan算法适用于离线批量处理多个查询请求。基本思想是以深度优先搜索的顺序访问这颗树,给这棵树的结点染色,一开始所有结点都是白色的,而当第一次经过某个结点的时候,将它染成灰色,而当第二次经过这个结点的时候——也就是离开这棵子树的时候,将它染成黑色。原创 2015-05-19 11:02:08 · 3495 阅读 · 2 评论 -
范围最小值问题(Range Minimum Query,RMQ)
问题描述给定一个n个元素的序列{A1,A2,……,An},在要求的区间Query(L,R)内找到最小值:min{AL,AL+1,……,AR}。hiho16算法描述在这里介绍最常用的Tarjan的Sparse-Table算法,它的预处理时间复杂度为O(nlogn),而查询时间只需要O(1)。令calc(i,j)表示从i开始的,长度为2j 的一段子序列的最小值,则使用循环的方式计算:calc[i][j]原创 2015-05-19 13:39:41 · 967 阅读 · 0 评论 -
hiho上的一些线段树问题总结
概念:线段树(Segment Tree)是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左子树表示的区间为[a,(a+b)/2],右子树表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树。叶节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。——摘自维基百科原创 2015-05-18 21:16:07 · 653 阅读 · 0 评论 -
最大值最小化问题
问题描述可参考最大值最小化问题,问题在刘汝佳老师的算法竞赛入门经典书上的p151页,核心算法是二分法猜最大值,猜对了继续小化,猜错了增大数字,初始左值为序列第一个元素值,右值为序列和。下面是我的C++实现代码#includeusing namespace std;#define N 1000000int a[N];int search_min(int n,int k){ i原创 2015-01-15 21:59:22 · 3436 阅读 · 0 评论 -
leetcode212:Word Search II
问题描述点此链接 Given a 2D board and a list of words from the dictionary, find all words in the board.Each word must be constructed from letters of sequentially adjacent cell, where “adjacent” cells are tho原创 2015-05-21 23:26:17 · 1020 阅读 · 0 评论 -
ZOJ Problem Set - 2004 Commedia dell'arte
求解N*N*N多维棋盘问题,解题思路参考:再论八数码求解逆序数参考:逆序数的几种求法下面是C++源代码#include#includeusing namespace std;#define N 1000005int a[N];int b[N];int count;long long inv;//void merge(int first, int mid, int last)原创 2015-01-13 14:20:22 · 682 阅读 · 0 评论 -
关于Time Limit Exceeded可能的原因
今天在做POJ上面的一道题目《M × N Puzzle》,Problem ID:2893,测试全部通过,就是提示超时,在网上找到原题源码对比发现逻辑上一模一样。。。然后最后的最后终于找到问题了,在这篇Why do I get a Time Limit Exceeded?文章中提到 In C++, do not use cin/cout - use scanf and printf instea原创 2015-01-13 17:26:55 · 11120 阅读 · 1 评论 -
leetcode003:Longest Substring Without Repeating Characters
##思路描述寻找字符串中最长的非重复字符的子串。思路:ab**c**def**c**,出现重复字符则截断从重复字符后一个字符开始的子串“defc”继续统计非重复字符子串,最终达到最长非重复字符子串!原创 2015-04-07 21:24:32 · 382 阅读 · 0 评论 -
leetcode009:Palindrome Number
##分析从问题描述奇少看出,代码也不会太多。关键点是不使用额外空间的情况下怎么取得对应位的值:除整取余数。如12358,取千位数的数字=>12358/1000%10.原创 2015-04-07 23:37:17 · 443 阅读 · 0 评论 -
leetcode004:Median of Two Sorted Arrays
##思路分析用到**归并排序**里面的关于两个有序数组合并的思想。 - 如果两数组总数是奇数,则中位数是最中间值,偶数则为最中间两个数均值; - 可能会出现某一数组已找完还没有到达中位数,需要继续在另一个数组上向后搜寻。原创 2015-04-07 21:40:28 · 441 阅读 · 0 评论 -
leetcode008:String to Integer (atoi)
##问题分析和leetcode007的题目用到的点基本相同,只是有些情况在运行测试后发现的,如“ +5df”这样的字符串是5,要考虑到,而不是返回错误,ok,直接上代码。原创 2015-04-07 23:31:21 · 427 阅读 · 0 评论 -
leetcode006:ZigZag Conversion
##分析这个想通了很简单,把它想成发扑克,正着发完直接反过来发:123212321,最后依次从1,2,3号人那里取扑克,即答案。现在的问题是拿什么数据结构存储“扑克”呢,先进先出,自然想到队列,运行时间更短的话肯定要用数据的,这里我用的vector。原创 2015-04-07 23:12:52 · 380 阅读 · 0 评论 -
leetcode005:Longest Palindromic Substring
最长回文子串,这个问题之前遇到过,发现理解了之后代码就很好写了,基本原理就是利用了回文串的特性:左右边子串相同。这里参考了[Manacher算法--O(n)回文子串算法](http://blog.csdn.net/sdjzping/article/details/8723438)里面介绍的算法。原创 2015-04-07 22:58:01 · 459 阅读 · 0 评论 -
leetcode007:Reverse Integer
##分析分析之前,leetcode提供了一些注意点,比如反转数字后造成的溢出要处理,关键问题来了,怎么处理溢出?这里用了float.h的类库,里面提供了int型的最值,所以只要将反转为long long类型然后判断是否溢出就可以啦。这里还用到了格式化输出的io函数,很是方便。原创 2015-04-07 23:21:52 · 441 阅读 · 0 评论 -
leetcode002:Add Two Numbers
## 思路 ##弄了半天才明白题目的意思,恩,发现就是模拟加法的过程,记得满10加1就ok啦。原创 2015-03-25 19:49:31 · 411 阅读 · 0 评论 -
leetcode023:Merge k Sorted Lists
问题分析这个问题是leetcode021合并两个有序列表的增强版:合并k个有序列表。 实现原理比较相似:每次取k个列表表头结点,依次找出这些头结点最小的(排序,便于后续利用)。这次学习了如何利用s原创 2015-04-15 15:30:08 · 441 阅读 · 0 评论 -
leetcode011:Container With Most Water
##问题分析木桶装水问题,乍一想要符合木桶效应:一只水桶能装多少水取决于它最短的那块木板。这里要从数组列表中找到两块“木板”能围住的最大面积(以较低的木板为高)。原创 2015-04-09 15:21:39 · 717 阅读 · 0 评论 -
leetcode012:Integer to Roman
问题描述Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.问题分析阿拉伯数字转罗马数字,只要了解了规则(请看参考链接,解释的很清晰),代码还是很简单的。范围是1到3999,所以千位单独处理,而个十百位的处理逻辑完全一致:0123、4、567原创 2015-04-09 22:06:26 · 411 阅读 · 0 评论 -
hiho一下 第二十八周 最小生成树三·堆优化的Prim算法
时间限制:10000ms单点时限:1000ms内存限制:256MB描述回到两个星期之前,在成功的使用Kruscal算法解决了问题之后,小Ho产生了一个疑问,究竟这样的算法在稀疏图上比Prim优化之处在哪里呢?提示:没有无缘无故的优化!输入每个测试点(输入文件)有且仅有一组测试数据。在一组测试数据中:第1行为2个整数N、M,表示小Hi拥原创 2015-01-19 16:10:00 · 1162 阅读 · 0 评论 -
hiho一下 第三十周 小Hi小Ho的惊天大作战:扫雷·一
时间限制:10000ms单点时限:1000ms内存限制:256MB描述故事背景:密室、监视器与充满危机的广场“我们还是循序渐进,先来考虑这样一个简单化问题:”小Hi思索片刻,道:“在一个大小为2*N的广场,其中第一行里的某一些格子里可能会有至多一个地雷,而第二行的格子里全都为数字,表示第一行中距离与这个格子不超过2的格子里总共有多少个地雷,即第二行的原创 2015-01-25 15:44:43 · 2122 阅读 · 0 评论 -
leetcode010:Regular Expression Matching
正则表达式匹配问题,首先要弄清楚问题里面的要求,总结下来正则式中会有以下四种类型的正则项:a型,单个字母,正常匹配,1对1;a*型,匹配0到n个重复字母(a*),视情况而定;.型,匹配任意1个字母;.*型,屌爆存在,想咋匹配自便!原创 2015-04-07 10:53:44 · 732 阅读 · 0 评论 -
leetcode037:Sudoku Solver
问题分析数独解法基本靠暴力求解,在所有没有确定的位置对所有可能的解进行尝试,直接暴力解运行时间是153ms。所以在此之前先确定一下唯一解的位置,唯一解有两种类型。该位置在所在行、列、宫上都满足的情况下的候选集只有一个;该位置在所在行(列、宫)的所有未确定位置的候选集该值只出现一次。原创 2015-04-30 15:14:56 · 796 阅读 · 0 评论 -
leetcode042:Trapping Rain Water
问题分析这道题目解题思路可以参考leetcode011:Container With Most Water 的分析,leetcode011是求围住的最大面积,这里有所区别,统计“装水”面积,还是从两边向中间扫描,时间复杂度O(n)。 这里设置一个水平面h,表示当前围住的高度,如果后续扫面到的比h低,说明可以装水,统计;如果比h高,更新h即可。原创 2015-04-30 15:03:27 · 659 阅读 · 0 评论 -
leetcode044:Wildcard Matching
问题分析这道题目和之前的leetcode010:Regular Expression Matching 规则稍有不同,就是对于'*' 号这次代表的是匹配任意字符(包括空串),这样处理方式上完全改变,而且思路比较简单,先把通配符字符串组成部分分为两类:******* ,连续的*,预处理的时候可以合并为一个*abc?d?,字母或?组合,后面都简写为X考虑到第二类必须匹配才有可能整个字符串匹配,所以分两种情况考虑就可以了。通配符字符串只有******或者XX*X*X或*X*X或者X*X*或者*X*这原创 2015-05-02 22:44:19 · 598 阅读 · 0 评论 -
leetcode028:Implement strStr()
问题描述Implement strStr().Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.Update (2014-11-02):The signature of the function had be原创 2015-04-17 09:41:21 · 573 阅读 · 0 评论