自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

theArcticOcean

博观而约取,厚积而薄发

  • 博客(58)
  • 收藏
  • 关注

原创 zoj 3421 Error Curves(三分)

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4105大意:很多的函数曲线,二次或一次,要构造这样的新曲线,对于每个x,新曲线对应的Y值是原来所有函数对应值的最大值。要求出新曲线上最小的y值。新曲线还是具有二次曲线的性质,所以应当用三分法来完成查找。对于每条函数曲线都得计算y值,最后选出最大的Y,此处只能暴力

2015-07-31 20:46:33 578

原创 poj 3737 UmBasketella(数学推导||三分)

题目:http://poj.org/problem?id=3737我是想练一练三分的,听说这题能用上,但是我做完了也没把三分派上用场(第一种方法)。数学分析一下就能得出结果啊。令圆锥的底面半径是r,高是h,侧面母线是l,由几何知识:圆锥侧面积s1=2*pi*r*l/2=pi*r*l,底面积是s2=pi*r^2。所以s=pi*r*l+pi*r^2. V=(pi*r^2)/3*h. 同时有:l

2015-07-31 15:55:04 933

原创 三分搜索算法&hdu 2899 Strange fuction

三分搜索算法:整个算法在最坏情况下的计算时间复杂性为O(log3(n)),每执行一次算法的循环,待搜索数组的大小减少三分之二。对具体n值的数组进行搜索时,虽然三分搜索法在数据搜索时,循环次数减少了,但在一次循环中最坏情况下需要进行数据的两次比较,由于充分利用了待搜索数组的最大数和最小数,在搜索方向的选择上灵活性更强。这是因为三分算法稍加变化可得从大到小方向上的三分法的搜索算法或从小到大方向上的

2015-07-31 11:03:53 1053

原创 zoj 3228 Searching the String(trie)

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3441看见它我就知道要用到AC,但是用经典的AC耗内存啊。而且还要求求出子串重叠的出现次数和不能重叠的出现次数两种情况。先给出的是源码串,再给出子串看有木有,输出出现的次数。所以先把源码插入tree中,然后统计能够重叠的情况和不能重叠的情况,并把信息存储起来,最后依

2015-07-31 09:37:23 748

原创 hdu 3065 病毒侵袭持续中(AC automaton)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3065每个子串是不同的,求出在源码串中各个子串出现的次数,按照输入子串的顺序将出现次数大于0的输出。例如:Sample Input3AABBCCooxxCC%dAAAoen....END Sample OutputAA: 2CC: 1Hin

2015-07-30 19:27:55 769

原创 AC自动机初识&hdu 2222 Keywords Search

AC自动机:Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。AC自动机的核心:字典树(trie树),KMP模式匹配算法,BFS(因为是多模匹配)。首先构造一颗trie树,再在trie树上制作fail指针(用到了temp指针尝试是否fail),有了这样的数据结构作为基础后就能用KMP算法的思想来查找目标串。最后用BFS来统计匹配的串的个

2015-07-30 10:45:33 798

原创 高斯消元法

线性代数里的高斯消元法在许多的程序问题中也常用到,在计算机里不能列出方程组,所以用增广矩阵来计算解集。比如这样的方程组:对应的增广矩阵:高斯消元的模板:#include#include#include#include#includeusing namespace std;const int MAXN=50;int a[MAXN][MAXN];//增广矩阵int

2015-07-29 15:42:43 1414

原创 最长公共子序列(dp) & hdu 1159 Common Subsequence

最长上升子序列问题(long conmon subsequence)简称LCS。来自《算法导论》的介绍:    我们将最后一种相似度的概念命名为最长公共子序列问题。一个给定序列的子序列,就是将给定 序列中零个或多个元索去掉之后得到的结果。其形式化定义如下:给定一个序列X=,另一个序列Z=满足如下条件时称为X的子序列(subsequence),即存在一个严格递增的X的下标序列,对所有j=1,

2015-07-23 21:05:25 759

原创 hdu 1087 Super Jumping! Jumping! Jumping!(最长上升子序列&dp)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1087其实我觉得这样的题目的解题核心应该叫做最大上升子序列更好,因为是求上升子序列的和最大的情况。不是单纯的长度最长(看下面最后一个测试用例)。根据题意引入测试用例:3 1 3 24 1 2 3 44 3 3 2 17 1 3 2 5 6 4 54 9 1 2 30用

2015-07-23 19:26:51 588

原创 寻找极小值(C百例)

原问题来源于《C语言精选名题百则-技巧篇》描述:因为和顺序相关,所以初步估计和二分有关。自己干脆写一个普通的查找和二分做一个效率上的对比(先输出对应最小数再输出查找的时间):产生数据:#include #includeusing namespace std;int main(int argc, char *argv[]) { freopen("cout.tx

2015-07-23 17:26:32 788

原创 python的初级训练

读了一点《A Byte Of Python》,对python有了初步的认识,但是没有动手练练总是不行的。所以在zoj上找了几道简单题用python写一写:zoj 1001 A+B Problem题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1001大意就是输出两个数的和。import sys

2015-07-23 15:01:07 687

原创 鸽巢原理(Pigeonhole Principle)

鸽巢原理(Pigeonhole Principle)的基本定理:If n + 1 objects are distributed into n boxes, then at least one box contains two or more of the objects.一个简单的例子:13个人里至少有两个人的生日是同一月的。鸽巢原理的相关原理: If n objects are p

2015-07-22 21:16:10 6383

原创 set四个集合操作&&红黑树初识

了解红黑树:首先说说二叉查找树。二叉查找树的重要性质:任何节点的键值一定大于其左子树中每一个节点的键值,并小于其右子树中每一个节点的键值。在极端情况下,当所有节点位于一条链上时,二叉查找树的操作时间为O(N)。沿树的左边向下走,能够找到最小值。沿着树的右边走能够找到最大值。和二叉搜索树一样,红黑树(一种特殊的二叉查找树)可以支持search,minimum,maximun,insert,d

2015-07-20 19:54:55 1088

原创 heap

heap:(二叉)堆是一个数组,可以被看做完全二叉树,根结点是1,lch=2*pa,rch=2*pa+1。堆常有max_heap和min_heap,前者heap[parent]>=heap[child],后者heap[parent]MAX-HEAPIFY (A, i )1  l= LEFT (i)2  r= RIGHT (i)3  if l A[i]4      large

2015-07-19 21:16:55 1052

原创 poj 2549 Sumsets(hash)

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23666a+b+c=d 转化: a+b=d-c。这就变成了查找问题。1000*1000/2=500000,所以需要5e5大的空间装散列表。下面用hash拉链法和开放地址法来实现:拉链法,存储结构即用到了链式前向星的思想。#include #include#

2015-07-18 16:51:28 847

原创 组合与排列的表达:pascal三角形和母函数

杨辉三角和母函数都能表达不同问题的组合结果,杨辉有利于打表存储且运算快,母函数则能更好体现了组合的思想和过程。已知C(n,m)=A(n,m)/m!=n!/(n-m)!/m!,对于如下的n和m:3 25 39 510 516 820 10约定: 1杨辉三角:#include #includeusing namespace std;typedef long l

2015-07-16 20:40:27 919

原创 指数型母函数&&hdu 2065 "红色病毒"问题

常用的指数型母函数:e^x=1+x/1!+x^2/2!+x^3/3!+……    e^(-x)=1-x/1!+x^2/2!-x^3/3!+……指数型母函数用于解决多重集合的排列问题,g(x)=p(n,0)+p(n,1)x+p(n,2)x^2/2!+p(n,3)x^3/3!+……+P(n,n)x^n/n!=C(n,0)+C(n,1)x+C(n,2)x^2+C(n,3)x^3+……+C(n,n)x

2015-07-16 16:10:17 883

原创 hdu 1003 Max Sum(分而治之||最大连续子序列 dp)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003大意:给出无序的一串数字,求出它最大的子序和及其起点和终点,如果有多个答案输出第一个(左边)。for(i=1;i#include #includeusing namespace std;const int maxn=1e5+5;int number[maxn];void mi

2015-07-15 10:45:13 654

原创 无限式查找(C百例)

问题来源于《C语言名题精选百则-技巧篇》。因为不知道数组的元素个数,所以无法直接用二分法。但是我们可以用已知的元素及无限大元素来确定可能包含目标值的数组长度,这就又能用二分法了。#include #includeusing namespace std;int midfind(int f[],int q,int length){ int low=0,high=length,

2015-07-15 08:30:23 538

原创 寻找固定的和(C百例)

我优化的想法:将已知的两个数组进行排序,前者从小到大排序,后者从大到小排序。然后遍历第一个数组,针对每一个数字,再在第二个数组中查找,和大了向后找,dex++,找到了就count++且dex++,当a[i]+b[dex]产生输入数据:#include#include#includeusing namespace std;const int maxn=1e4;#define pi

2015-07-14 22:44:11 615

原创 寻找脚码(C百例,折半&&测时)

问题如上。因为已经排好了序,所以很容易联想到折半查找(二分)来提高效率。下面对普通方法和折半做一个对比:测试数据:#include#includeusing namespace std;const int maxn=1e7;int main(){ freopen("cout.txt","w",stdout); cout<<maxn<<endl; for(int i=1;i<9

2015-07-14 20:08:26 1700

原创 hdu 1800 Flying to the Mars(字典树||map||hash)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1800给出一堆士兵的等级,等级高的的士兵可以当等级小的士兵的师傅,一个士兵最多一个师傅(可以没有),一个师傅最多1个徒弟(可以没有),如果是师徒关系,可以用一把扫帚练习技能,问:全部士兵都用扫帚练习时需要的最少的扫帚数量?这就是寻找一棵树的最大分支嘛,如果所有的数字均不相同那么必能连成一串,仅需

2015-07-13 16:42:23 805

原创 hdu 1004 Let the Balloon Rise(trie||映射统计)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1004给出一定数量的字符串,求出出现次数最多的字符串。统计字符串可以用字典树,我用trie做运行了15MS。#include #includeusing namespace std;typedef struct node{ int num; bool fin; struc

2015-07-13 14:30:41 610

原创 字典树(trie)

字典树(trie)是一种词典的储存结构,它的基本特征:1.除根节点外每个节点都能包含字符。2.从根结点到某一节点,经过路径的所有的字符串起来就是这个节点对应的字符串。3.每个节点的子节点的字符都不一样。字典树的核心思想:用时间换取空间。因为"根结点"的字符就是子树的公共前缀,方便了检索,所以常用于统计和排序大量的字符串(当然不仅仅是字符串)。它的时间复杂度:O(n),空间的复杂度:

2015-07-13 11:24:58 420

原创 连续整数的固定积(C百例)

给定一个数字,要求把这个数字的连乘积求出来,比如给定了6,结果应该是1~3,给定了20,结果则是4~5。我解决这个问题的思路和《连续整数的固定和》的思路一样。程序可以把数据类型再改一下,扩大数据范围,因为具有连乘积性质的数字不太多。#include #include#includeusing namespace std;void f(int x){ int i=1,j=2,

2015-07-13 08:50:00 774

原创 连续整数固定和(C百例 & 51nod 1138)

书上讲了一种提高效率的方法。原始算法:用i遍历1到n-1,如果i到j的和等于n那么就输出相应的结果。我们可以发现当sum(i,j)=n时,继续j++,sum+=j,计算的sum肯定是大于n的,于是便在sum(i,j)=n输出结果后,sum-=i,再继续sum+=j等后续工作,这样避免了无用功。#include #includeusing namespace std;void f(int

2015-07-13 00:09:27 811

原创 hdu 4864 Task(贪心)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4864n台机器,m个任务,每台机器和任务都有两个值,机器的两个值time, level都大于或等于任务time,level时,这台机器才能完成这个任务,每台机器只能完成一个任务,完成一个任务就能增加5*time+2*level,问最大的任务完成量,如果完成量相同求出最大的结果值。主要按照时间从大

2015-07-12 19:48:41 598

原创 hdu 1789 Doing Homework again(贪心)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1789有t组测试数据,每组测试数据中有n门功课,第一排是完成它们的期限,第二排是未在限制的时间内完成的要扣除的分数,然后是需要求怎样安排才能使得扣的分数最少。我是这样想的,从时间轴出发,尽量每天都安排有任务,假如某天有多个任务需要完成,就把未安排的score大的任务替换已安排的score小的任务

2015-07-12 15:36:33 624

原创 hdu 1051 Wooden Sticks(贪心)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1051经典的贪心题,按照l,w排好序后进行扫描标记,注意逻辑即可。#include #include#include#includeusing namespace std;struct stick{ int l,w,tag; bool operator <(const

2015-07-11 21:12:39 593

原创 codeforce 3B. Lorry(贪心)

题目:http://codeforces.com/problemset/problem/3/B大意是,给定N和V,在给出N个vehicle的类型号(1或2)和各自的载重量,求在不超过V的情况下最大的载重值及其分配方案。这应该不用01背包,如果用背包Vei数组开不了那么大。那怎么破?因为存在物品空间占用1这一特殊条件,所以只要ka够用就能把V填满,这里可以用贪心做。先把ka和ca各自的数

2015-07-11 19:48:46 887

原创 codeforce 7A. Kalevitch and Chess(粉刷)

题目:http://codeforces.com/problemset/problem/7/A第一次做这题时一阵瞎敲(当时题目的大意是一个粉刷匠粉刷墙壁,但是并不影响问题原型),啥也不懂。后来训练时又遇上了,思路清晰多了。在墙上刷一次无论是横着的还是竖着的都具有”贯穿性“,即连续8个点全是B。那么在8*8的墙上统计所有行中B的数量,最小的就是列的粉刷数。同理,列上最小的B的数量就是粉刷行数

2015-07-11 15:42:29 895

原创 codeforce 7B. Memory Manager

题目:http://codeforces.com/problemset/problem/7/B模拟计算机的内存处理:使用内存,释放内存,整理内存(把未释放区集中于起点)。使用数组模拟一片内存,完成这三种操作。#include #include#includeusing namespace std;int mem[105],cnt;int worka(int k,int m){

2015-07-11 15:24:48 745

原创 codeforce 3D. Least Cost Bracket Sequence(贪心)

题目:http://codeforces.com/problemset/problem/3/D( ??)( ( ))(()))……这个问题基于贪心思路解决,给定的字符串如果是可行的,那么左边多出的一定是(,右边如果有多出的那一定是)。那么对于出现的?直接选填),这样不断抵消,如果多了),那就把之前的某个)换成(,注意换后cost就会-b+a,要让cost小就要a-b小,也即

2015-07-10 09:38:00 658

原创 C++ priority_queue

priority queue在许多的特别场合还是很实用的,因为它带来的便利,人们可以少写很多的代码,所以学习它是有必要的。很多时候我们会自己定义比较函数,因为标准库默认使用元素类型的在g++编译器中编译不过,在函数中operator旁边还是用#include#include#include#include#includeusing namespace std;struct cm

2015-07-09 19:42:24 1084

原创 poj 2185 Milking Grid(KMP)

题目:http://poj.org/problem?id=2185求出最小重复子矩阵的面积。我们知道,一个字符串的最小重复子串长度等于length-next[length],把所有行的最小值不断lcm,就能得到所有最小值的公倍数,也即是w。同理对列进行相应的操作就能得到h。另外由于可以有重叠部分超出原矩阵,所以w=min(w,c),h=min(h,r)。#include #inclu

2015-07-09 15:31:11 517

原创 poj 3461 Oulipo(KMP)

题目:http://poj.org/problem?id=3461大意是这样的:在一篇没有空格的文章中找到给定的词,统计出现的次数输出。用KMP求出前缀-后缀编码,将词当做模式串在文章中不断移动寻找相同的词。#include #include#includeusing namespace std;const int maxn1=1e4+5,maxn2=1e6+5;char

2015-07-09 10:14:20 569

原创 poj 2406 Power String (KMP)

题目:http://poj.org/problem?id=2406简单的讲就是找出用多少个最小的子串可以组成给定的字符串。这还是用到了KMP里的前缀-后缀特征,next[len]就是最大的前缀-后缀子串长度。#include #include#includeusing namespace std;const int maxn=1e6+5;char str[maxn];int

2015-07-09 09:13:37 511

原创 poj 2752 Seek the Name, Seek the Fame(KMP)

题目:http://poj.org/problem?id=2752大意就是求解给定字符串的所有前缀-后缀字符串(比如alala的前缀-后缀串是a,ala,alala),按照长度升序输出length。正确理解了KMP的原理和精华解决这个问题是不难的。首先,一个字符串本身是它的最大前缀-后缀。接着,前缀函数得到的next[len]就是第二长的前缀-后缀串,next[next[len]]则是第二

2015-07-08 22:24:37 537

原创 KMP & hdu 1711 Number Sequence

KMP是在传统的简单模式匹配基础上进化来的,通过向右尽量滑动远一点,除去冗余的滑动操作提高效率。更加详细的讲解拜访这位大侠:http://billhoo.blog.51cto.com/2337751/411486/编码实现:#include #include#includeusing namespace std;char str[100];int next[100],le

2015-07-08 11:26:16 631

原创 多重集合的排列与组合

《Introductory Combinatorics Fifth Edition》学习笔记:多重集合的排列:设S是有k种不同类型对象的多重集合,每个元素都有无限的重复数。那么s的r排列数目是k^r.例子:最多有4位的3进制数(3元数)的个数是多少?分析:3^4=81。设s是多重集合,有k种类型的对象,且每种类型的有限重复数是n1,n2,……,nk。s的大小是n=n

2015-07-07 20:55:55 6428

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除