自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

转载 初探编译器static、const之实现原理

<br /><br />转自http://hi.baidu.com/fangyi86/blog/item/959f7d36852210d2a2cc2b57.html<br />对于许多C/C++初学者,往往知道static变量只是被初始化一次,对于const变量,只知道他的值是不能被修改的,但是对于其实现却不知所有然。这里我以VC6.0 SP6为平台,揭开其编译器实现原理。<br />下面看一段程序:引用:#include <iostream.h><br />void fun(int i)<br />{

2011-02-16 21:18:00 540 1

原创 强连通分量模板

Tarjan算法void Tarjan(int u) { DFN[u]=LOW[u]=++index; instack[u]=true; stack[top++]=u; for(node*temp=edge[u];temp;temp=temp->next) { if(!DFN[temp->v]) { Tarjan(temp->v); LOW[u]=LOW[u]v]?LOW[u]:LOW[temp->v]; } else { if(i

2010-12-11 14:28:00 108

原创 Kruskal模板

<br />struct Edge { int u,v,w; }edge[MAXN]; int n,m,ecnt; int p[maxn]; bool operator <(const Edge a,const Edge b) { return a.w<b.w; } int find(int a) { if(a==p[a]) return a; p[a]=find(p[a]); return p[a]; } bool Kruskal() { int i;

2010-12-11 02:42:00 472

原创 poj 3630

<br />题意:给定一组电话号码,判断是否有一个号码是其他号码的前缀,如果是,输出YES,否则NO。<br />字典树,在insert的过程中同时判断,然后返回该值。<br />#include<iostream> #include<algorithm> using namespace std; struct Node { Node*next[10]; bool end; Node() { end=false; for(int i=0;i<10;i++) nex

2010-12-04 18:54:00 411

原创 poj 1065

<br /> <br />题意:有一堆木头需要加工,每根木头有长度和宽度两个key值,而加工机器有这样的特点,加工第一根木头需要用1分钟的时间加热机器,然后后面的木头的加工时间为①如果木头的宽度和长度都大于前一根木头,则无需加热时间否则需要一份钟的时间重新加热机器。问给一定n根木头,最少需要多少的加热时间?<br />分析一下,这题很像活动选择那题,我们先考虑最小的一根木头(没有其他木头的长度和宽度都小于它,这种木头可能有多根),发现无论如何它都要1分钟的加热时间,于是我们先选择这个木头,考虑应该再选哪根木

2010-12-03 13:20:00 834 1

原创 poj 2001

题意:给定一组单词,然后问要怎样的字符串前缀来表示单词,才能没有歧义(要求前缀越短越好)很明显的一道字典树。我们在node节点里加多一个key值,用来表示当前节点出现了几次。然后每次搜一个单词的缩写时,我们从根节点开始搜,不断输出,知道发现该值为1(这种情况说明只有一个单词出现在这里)。代码如下:#include using namespace std; const int MAXN=26; char s[1010][40]; struct Node { Node*next[MAXN];

2010-12-03 00:36:00 575

原创 poj 2586

<br />题意:某某公司每年会进行8次结算,每次结算包含5个月(第一次是1-5月,第二次是2-6月,以此类推),已知每个月要么是盈利s元,要么是亏损d元。现在关于所有月份的结算都已经丢失,只知道8次结算都是亏损的,问当年最多赚多少钱。<br />我们先分析下连续5个月的情况,有sdddd,ssddd,sssdd,ssssd四种情况,如果想让赚的钱越多,就应该使每次结算中s的数目越多,但同时要保证每次结算都是亏损的,这样的话,容易知道只有四种情况需要分析:sddddsddddsd,ssdddssdddss,

2010-11-30 14:11:00 381

原创 poj 1083

<br />题意:某层楼有400个房间,人们现在要将这些房间里的桌子搬动,如果将一张桌子从房间i搬到房间j,那么 i 到 j 之间的这段走廊就被占用了,其他人不可占用。而每搬一次桌子,就要用掉10分钟,然后给定一个数n,表示要搬的桌子数,接下来有n行,每行两个数a和b,表示房间a的桌子要搬到房间b去,问最少要多少分钟。<br />这题明显是贪心,对于每次搬动,我们记录两个值,一个是 l (表示走廊左边),一个是 r (表示走廊右边),然后排下序,像活动选择问题那样,不断找到第 i 次能分配的最多的房间数目,

2010-11-30 14:03:00 442

原创 poj 1042

<br />题意:John准备去钓鱼,这片区域一共有n个湖,每个湖都有两个值,一个是f(表示最初5分钟能钓到多少鱼),另一个是d(表示钓5分钟,湖里的鱼会少几条),而相邻两个湖之间都有一段距离,走过这段距离需要时间t(每个时间不尽相同),求给定时间内,最多能钓到多少鱼。<br />看了一下数据,发现不大,、于是很容易就想到了贪心,这题主要麻烦的地方是不知道最后停在哪个湖,以及钓鱼时间和路上花费的时间该怎么平衡,于是我们首先枚举最后一个钓鱼的湖在哪里,这样我们就能直接把走路时间减去,然后再选择钓鱼数目最多的湖

2010-11-30 13:52:00 663

原创 poj 1323

<br />题意:n个人在玩牌,每个人有m张牌,于是就有n*m张牌(每张牌都有一个值,介于1到n*m之间,不重复),然后进行m轮游戏,每轮每个人都出一张牌,牌最大的那个人就赢了,然后给出n和m,以及你的m张牌,问你最多能赢几轮?<br />先看例子<br />6 11<br />62 63 54 66 65 61 57 56 50 53 48<br />分析一下容易知道,66和65必定能赢,而61,62和63之中必定有两张能赢(能赢他们的只有64,且只有一张),于是大致想法就出来了,从n*m开始递减到1,检

2010-11-30 12:40:00 1894

原创 poj 1328

<br />这是一道经典的贪心题<br />题意:用一个平面坐标系来表示一个地面,其中x轴是海岸线,y<0的半平面表示地面,而y>0的半平面表示海洋,海洋上有n个岛屿,我们需要在海岸线(x轴)上建立一些雷达站(半径全部为d),使得将所有岛屿都包含在雷达站的范围内。<br />这题比较容易看出是贪心,对于一个给定的岛屿(x,y),容易知道只有在坐标范围是 l = (x-sqrt(d*d-y*y),0)到 <br />r = (x+sqrt(d*d-y*y))建立雷达站时,才能将岛屿包含进来,所以对于每个给定岛

2010-11-30 12:14:00 475

空空如也

空空如也

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

TA关注的人

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