自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mollnn

You Tomorrow will befall.

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 数据结构Note:伸展树(Splay Tree)

基本思想: 每个节点被访问时,使用旋转操作将其移动到根。 旋转是自底向上的,因此需要设置父亲指针核心操作:伸展Splay(x)保持伸展树有序性的前提下,将元素x调整到树的根部单次双旋,分若干种情况讨论!p->father x==y->left Zig(x)x==y->right Zag(x)p->father (令p=x->father)x==p->left p==p->father-

2017-06-06 20:05:51 474

原创 HNOI2017-伤感之中充满希望

几个月前,我曾经对这样一天满怀期待……为此,我立下了海誓山盟:认真读书,认真刷题,认真备考。 几个月后,我没有做错什么。我只是输给了现实。回到家,已是傍晚,转角,告别了车水马龙的街道,又仿佛倾吐了新的告白——期中考试在即,即将到来的是疯狂的七十二小时。或许,我也可以说,过去的,是疯狂的四十八小时。 夜幕降临,微城灯火通明。 我伏案,心却不曾平息。失败,是因为我不曾争取,这是我自己的选择。 如

2017-04-16 20:04:31 1318

原创 矩阵乘法在递推问题中的简单应用

这里我们以Fib问题为例。Fib数列是一个著名的递推数列,其规律可表示为f[i]=f[i-1]+f[i-2];我们要做的事,就是求出fib数列的第n项。由于这个数字可能很大,因此只需要输出它对10007取模的结果。 这里我们约定:对于80%的数据,n<10^8。对于100%的数据,n<10^10。几乎不需要经过多少思考,我们就能写出一个80分版本:#include <cstdio>using n

2016-10-29 19:29:30 560

原创 Dijkstra最短路径算法的优化

在传统的Dijkstra算法中,我们不难发现,大量的时间被用于遍历d[]数组。 因此,我们可以通过一个小顶堆来替代这个遍历过程。优化后的算法复杂度为O(v*lgn)。#include <cstdio>#include <cstring>#include <queue>using namespace std;#define MAXN 10005#define MAXM 500005#de

2016-10-06 13:31:56 1363

原创 动态规划基础题:低价购买(最长下降子序列)

题目描述“低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购买它。买的次数越多越好!你的目标是在遵循以上建议的前提下,求你最多能购买股票的次数。你将被给出一段时间内一支股票每天的出售价(2^16范围内的正整数),你可以选择在哪些天购买这支股票。每次购买都必须遵循“低价

2016-10-03 09:48:10 673

原创 动态规划基础题:机器分配

题目描述总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。输入输出格式输入格式: 第一行有两个数,第一个数是分公司数N,第二个数是设备台数M。接下来是一个N*M的矩阵,表明了第 I个公司分配 J台

2016-10-03 08:48:43 2033

原创 数据结构:从堆到“漏斗”

问题引入:黑匣子Black Box是一种原始的数据库。它可以储存一个整数数组,还有一个特别的变量i。最开始的时候Black Box是空的.而i等于0。这个Black Box要处理一串命令。 命令只有两种: ADD(x):把x元素放进BlackBox; GET:i加1,然后输出Blackhox中第i小的数。 记住:第i小的数,就是Black Box里的数的按从小到大的顺序排序后的第i个元素。

2016-10-02 22:14:24 558

原创 最小生成树Prim与Kruskal算法的比较

最小生成树是图论问题中很基本的一个操作。常用的算法有Prim和Kruskal两种算法。本文对这两种算法稍作区别与讨论。Prim算法是依赖于点的算法。它的基本原理是从当前点寻找一个离自己(集合)最近的点然后把这个点拉到自己家来(距离设为0),同时输出一条边,并且刷新到其他点的路径长度。俗称,刷表。 根据Prim算法的特性可以得知,它很适合于点密集的图。通常在教材中,对Prim算法进行介绍的标程都采用

2016-09-19 21:48:50 15147

原创 0-1背包的维度拓展

引言 0-1背包是经典的动态规划背包问题之一,也是多数背包问题的基础。0-1背包标准版本(完全表达)需要两个维度,一个表示物品i,一个表示代价j。优化后,可省去物品维度。那么,如果有两种代价又该如何呢?于是,我们将0-1背包拓展一个维度来进行讨论。核心讲解 取材于现实生活中,你要寄快递,快递对体积和重量均有限制。再比如,常见的军火运输问题,等等。从背包问题的原理来看,我们只需开两个代价维度就可以

2016-09-17 15:30:42 555

原创 【挫纪】多重背包问题的优化细节

众所周知多重背包问题的一个重要优化:二进制分解。 然而在二进制分解时,有细节需要注意。一、分解顺序问题 有时候脑子抽筋,会突然用位运算移位来直接获取分解结果。这种方法是不可取的,例如5=101,按照移位分解的方法就会分解为4+1,而事实上我们要分解成1+2+2二、分解后的冗余运算 分解之后会留下剩余的部分,对于剩余的部分,必须要一次性清除,万不可一次次处理,这样时间复杂度会很高。三、边分解边运

2016-09-16 16:07:50 501

原创 逆序对在OI中实际问题里的细节处理

之前写过一篇关于逆序对的描述文章: http://blog.youkuaiyun.com/mollnn/article/details/52503183 如果需要了解与逆序对有关的信息,见上文。本文主要交代,在OI中使用逆序对算法需要注意的细节:判断问题是否确实适合使用逆序对(废话)排序要求是升序还是降序排序要求中遇到等号怎样处理因为逆序对ANS通常很大,所以注意是否要开long long?对应的如

2016-09-16 14:27:13 485

原创 归并排序与逆序对

归并排序是一种运用了二分算法的排序,其基本原理可以理解为拆分对合并。利用归并排序可以便捷地求出逆序对的个数。参考代码如下所示:#include <iostream>#include <cstring>#include <cmath>using namespace std;int n,a[100000],x[100000],ans=0;void msort(int l,int r){

2016-09-11 11:50:50 560

原创 二分算法基础 第一章 简单二分

二分算法是一种效率极高的算法(思想),在很多的实例中都得以运用,比如快排和归并排序。本文将对二分算法的一些基础内容以及使用进行讨论。入门-二分查找 我们先来看一个二分查找的例子。(p2searching.cpp)#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>

2016-09-10 16:31:18 734

原创 快速幂算法基础

快速幂算法主要应用于求幂模的问题。 我们可以先定义一个问题: 如何求2^31的最后一位数?显而易见,结果当然是8.这个问题是具有特殊性的,可以用某些特殊解法来处理。但是作为我们对快速幂的学习例程来看,我们需要从特殊问题中寻找一般算法。 对于这个问题,最脑残的算法是:#include <iostream>#include <cstdio>#include <cmath>using name

2016-09-10 16:28:19 538

原创 C++STL中String类的分析与运用

[Mollnn.Fan原创,转载请注明出处] 本来以为有了String类,所有的字符串操作都变得非常简单。然后,在某次实际测试中反应出了很大的问题。原本只涉及到区区一个replace,在有参考资料的状态下10分钟轻松解决的问题,只因为忘记了replace函数的原型,导致了问题的复杂化。说实话,对于MFC的CString我或许更加熟悉,但应付竞赛需要,现在开始改掉用MFC的习惯。 在那道替换问题中

2016-09-06 12:55:44 566

原创 并查集初阶:畅通工程问题

畅通工程问题是一个很经典的并查集问题。不是说这一题不可以用图论来解决,而是这题用并查集的思想省时省力,何乐而不为?并查集类的补充:Count函数 在我之前的一篇文章中,用一个类封装了并查集的基本操作。而现在我们针对在畅通工程中遇到的一个问题,我们对这个类进行一个简单的拓展,也就是增加一个简单的Count函数。这个函数用于计算集合的数量。 int Count(int s,int e)

2016-08-29 21:11:14 915

原创 并查集应用:入门级

题目引用自洛谷。  若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。第一行:三个整数n,m,p,(n以下m行:每行两个数Mi,Mj,1接下来p行:每行两个数Pi,Pj,询问Pi和P

2016-08-29 20:14:37 461

原创 并查集初探(一) 核心代码

在本文中,我们将并查集的基本操作封装为一个类,以便后面研究并查集的相关问题。class UnionFindSet{ public: int father[UFS_LIMIT]; UnionFindSet() { for(int i=0;i<UFS_LIMIT;i++) father[i]=i; return; } int Fi

2016-08-29 18:21:01 660

原创 秦九韶算法——高速的多项式运算解决方案

我们来设想一下,有一个次数为5000的多项式,需要10000次代入值查询,用传统的计算方法,时间复杂度有多高?每一次带入,根据需要2500*5000=1.25*10^7次运算,可以视为O(n^2)设带入次数为M,则复杂度为O(m·n^2)=O(1.25*10^11)有什么办法能降低复杂度,让这个目标在1s内完成呢?秦九韶算法就可以做到。通过数学上对多项式的一个简单变形,或者说,提公

2016-08-25 20:26:42 1577

原创 方格取数问题:双线动态规划

#include #include #include using namespace std;int main(){ int i,j,l,k,n,t1,t2,t3,t4,a[10][10],b[10][10][10][10]; cin>>n; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); while(cin>>t

2016-08-24 16:59:23 543

原创 过河卒问题:简单动规

#include #include #include #include using namespace std;const int hmx[8]={-2,-1,1,2,2,1,-1,-2};const int hmy[8]={1,2,2,1,-1,-2,-2,-1};int hx,hy;int check(long long int x,long long int

2016-08-24 16:01:33 1053

原创 搜索与数据结构

最简单的搜索当然分为两种,深度优先搜索和广度优先搜索。这两种算法分别采用了栈和队列的数据结构来实现。对于深搜,优化方法通常是各种剪枝,主要包括最优化剪枝和可行性剪枝。对于广搜,优化方式通常是进行重复去除和优先搜索。通常都说能用深搜不用广搜,其实在一定条件下确实有道理。在很多情况下,深度优先搜索通常比广度优先搜索写起来简单、方便。同时,采用简单的递归方法来描述深度优先搜索,可以避开对数据结构

2016-08-24 12:39:30 799

原创 八皇后问题优化版(含代码)

之前发表过一个版本的八皇后,后来在洛谷上看到了另一个八皇后(其实是N皇后)。这个最大到达13,对剪枝要求较高。之前版本的程序有一个测试点无法通过。提供参考代码:本代码在输入13的时候可以在600ms内通过。

2016-08-13 19:56:05 2340

原创 Algorithm中QSort的几个误区

误区1:Sort和QSort没区别这个不解释了,自己看定义误区2:不能用来排字符串和结构体这个……都是可以的,只是拍结构体要特殊些:struct str{int a;int key;};int cmp(const void *a,const void *b){return (*(str*)a).key-(*(str*)b).key;}误区3:关于

2016-08-13 19:49:58 445

原创 八皇后问题:DFS剪枝

八皇后问题是一个DFS的老问题了。【摘自OPEN JUDGE】描述会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8

2016-08-10 19:01:59 4350

原创 动态规划-采药问题 [原题+题解]

这里的采药问题是一个典型的0-1背包。原题(引用OPEN JUDGE)1775:采药总时间限制: 1000ms 内存限制: 65536kB描述辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩

2016-08-09 09:38:26 2254

原创 POJ-数据结构与算法-线性表 多项式加法

一开始把这一道题想得太简单了,直接用一个50W的数组结果RE.提交人班级结果内存时间代码长度语言提交时间mollnn Accepted664kB17ms834 BG++3分钟前mollnn Runti

2016-08-06 15:00:57 767

原创 POJ:1328 特别注意flag的使用地点

这题折腾了好久才AC,其实原先修改了各种部分,但是最终没有发现,其实错误的原因是flag to continue的摆放位置。在这道题中,flag的退出地点不正确,导致了其他的数据被误当做flag来读入,导致数据的读入不正确。提供我的参考代码:{优快云:CODE:1328.cpp}

2016-07-30 18:06:31 481

原创 POJ1007: Output Limit Exceeded的解决方法

本题遇到了好久不见得OLE。后来发现,是CHAR数组定义的刚刚好,装不下/0导致的。+1即可。另外:本题由于数据量很小未做优化,以下有两种优化角度:1.优化权重计算本题中我们直接用O(N^2)的复杂度计算权重,实际上并不需要。因为我们可以使用累加法来计算。因为题目中只出现4个字母,所以累加法显得非常有效。举例:我们要计算串CAB的权重分别开3个计数器:sum

2016-07-26 15:51:29 3946

原创 POJ1006A:细节不是骗局

这次程序,竟然写了一个多小时。!只因为忽略了两句话:【所有给定时间是非负的并且小于365, 所求的时间小于21252。】细节不是骗局,忽略细节才是骗局!#include #include using namespace std;int main(){ int count,j; count=0; int p,e,i,d; int t; while(cin

2016-07-25 21:08:54 785

原创 POJ1003:Hangover

#include #include #include using namespace std;int main(){ double len;//Length while(cin>>len&&len!=0) { int s=0;//累加和 double l=0;//出边和 while(l<len) { l+=(double

2016-07-25 16:02:42 442

原创 POJ1002:487-3279 神奇的TLE

今天见识到了TLE的神奇。一个TLE能让你惊诧不已:原题:487-3279Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 277364 Accepted: 49496Description企业喜欢用容易被记住的电话号码。让电话号码容易被

2016-07-25 15:40:24 745

原创 POJ1001:高精度运算程序(X)

本以为一个高精度乘法是分分钟可以解决的事情,但没想到遇到这种刁难人的测试数据,还真废了点力气。修改了3次才通过所有数据15800101mollnn1001Accepted772K141MSG++1888B2016-07-24 21:37:20以下为我自己的代码,通过了测试:#include #include #

2016-07-24 21:41:21 735

原创 单源最短路径SPFA算法-邻接矩阵

使用邻接矩阵的SPFA算法,运用了宏定义的FIFO_Q来维护队列。

2016-07-22 12:45:40 932

原创 单源最短路径 DIJ算法(无堆优化)

单源最短路径 DIJ算法(无堆优化)

2016-07-17 11:29:13 1196

原创 c++高精度运算(加、乘)

通过c++实现高精度运算+与X的程序。

2016-07-17 11:27:10 944

Mollnn制作的草稿版

Mollnn制作的一款草稿版软件 给大家分享以下

2012-10-26

空空如也

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

TA关注的人

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