自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式学习(二) 简单工厂模式

今天我学习了一下简单工厂模式,其实简单工厂模式并不被包含于GoF 23种设计模式中,但也是会被频繁的使用在开发中,而且也算是其它工厂模式学习的入门吧。首先,我想通过一个例子,引入今天的主题。如果我要设计一个学校职工信息管理系统,我要向服务器请求老师、学生、和其他工作人员的基本信息,那我们应该会如何进行设计呢?在不了解各种面向对象设计模式的时候,我们很容易想到的一种方法就是,先定义三个类分别是S

2014-03-20 00:29:40 898

原创 设计模式学习(一) 单例模式

为了更好地理解面向对象的思想,我需要更好地理解一下24种常用的设计模式,因此计划好好理解一下这些设计模式并把自己对于这种模式的一些想法和实现的代码记录在博客上。几天首先从最简单的“单例模式”开始:单例模式是创建型模式的一种,是24种设计模式中相对最简单的一种,但是使用频率还是比较高的。书上对其的定义为:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。我们初

2014-03-19 00:49:42 628

原创 【UE5 C++ 學習日志】01. UEnhancedInput

UE5 提供了一種對複雜輸入處理或運行時重新映射按鍵增强輸入插件。此插件向上兼容UE4的默認輸入系統,并可以實現径向死区、同时按键、上下文输入和优先级安排等多種功能。

2023-09-18 23:00:48 452

原创 linux下使用ioctl() 获取本机mac地址、ip地址等等

在linux下,我们可以通过ifconfig获取mac地址和ip地址等相关信息,dan sh

2014-04-08 01:07:46 13369

原创 mac os 安装 boost库

我们都知道 mac os 是基于unix的,所以说在某些方面上,我们可以去尝试把它当作unix使用,因此我们也可以使用vim在mac os上做gcc的开发。但是为了提高开发效率,个人更喜欢使用xcode编译器,所以这里我将介绍一下xcode+boost的安装过程。首先我们要在 www.boost.org 的网站上下载新的boost库,我使用的是wget命令(这个命令需要在mac上安装),当然也

2014-03-31 01:17:11 10458

原创 设计模式学习(三) 工厂模式

工厂类代码:#ifndef CLASS_H#define CLASS_H#include using namespace std;class BasicClass{public: virtual void Show() = 0;};class BasicClassA: public BasicClass{public: void Show() { cout<<

2014-03-22 00:19:16 617

原创 CentOs 安装gcc 4.8.1

因为在linux下,gcc 4.8.1 是全面支持c++11的新特性的,所以想尝试一下,所以今天晚上安装gcc 4.8.1。我的linux系统是CentOs版本,所以先用命令查看现有的gcc版本:rpm -qa |grep gcc首先是要下载:gcc-4.8.1.tar.bz2    gmp-5.1.3.tar.bz2   mpfr-3.1.2.tar.bz2   mpc-1.0.tar.

2014-01-29 23:30:52 1288

原创 poj 3343 Against Mammoths

题目超长,难在读题,理解题以后就可以看出是一道二分查找+最大匹配的题目了题意:有n个人类星球,m个外星球,每个星球上开始sh艘飞船,之后每年会生产p艘飞船,人类想要战胜所有的外星球,每个人类星球和每个外星球的距离已知(需要耗费年),比如在a年初,人类星球H向外星球A宣战,那么人类会带上sh+p*a艘飞船进攻,经过k年后到达外星球,这时外星球飞船的数量为sh'+p'*(a+k),如果这时人类飞船

2012-08-28 11:17:08 916

原创 poj 3340 Barbara Bennett's Wild Numbers

水题,只要分析好所有的情况就很好做的。#include#includeusing namespace std;string s1,s2;int main(){ while(cin>>s1) { if(s1[0]=='#') break; cin>>s2;int count =0; int n = s1.length(); for(int i=0;i!=n;i

2012-08-26 12:08:42 838

原创 poj1386 Play on Words

使用并查集判断连通性,然后再找欧拉通路。#include using namespace std;int n;char st[1005];bool exist[30];int in[30], out[30];int father[30];int find_father(int a){ if (father[a] == a) return a;

2012-08-26 09:53:54 494

原创 poj1556 The Doors

难点在构图上,每面墙的两个门,都有四个顶点,可以和其他点相连(如果中间没有墙阻挡),因此就可以成功构造出一幅图。#include#includestruct point{ double x,y;}p[200];struct segment{ point a,b;}s[200];double g[200][200];int t;double cross(point

2012-08-25 14:10:33 565

原创 poj 2762 Going from u to v or from v to u?

题意:给出一幅有向图,要求判断,判断在这幅图中的任意两点x,y,一定有一条路可以从x到y或从y到x。思路:缩点+拓扑,一个连通分量一定是满足要求的,那么把连通分量缩成点,拓扑排序,若是在删除某点后,有两个点的入度都为0,则输出No;若能全部删除输出Yes。#includeusing namespace std;const int MAXN =1001;int DFN[MAXN];i

2012-08-15 01:05:36 1411

原创 poj 1422Air Raid

最小路径覆盖,给定一个有向图,在这个图上的某些点上放伞兵,可以使伞兵可以走到图上所有的点。且每个点只被一个伞兵走一次。问至少放多少伞兵。我们可以把问题转化为,在图上的边中选出一些边,使得每个点的如度与出度都不超过1。我们开始在图上的每个点都放上伞兵,然后每选出一条边,就意味着有一个伞兵可以被取消掉了。也就是说需要的最少伞兵数=点总数-能选出的最大边数。我们只要求最大边数即可

2012-08-12 10:49:08 473

原创 poj 1325 Machine Schedule

一开始觉得没有思路,后来发现,任何一个job都可以和两端的机器的方法各有一条连线,那么路径数即为job的个数。因此,求出覆盖所有路径所需的最小点数即为解。便转化为最小点覆盖问题。/* 题意:有两台机器A和B,分别有n种和m种不同的模式,有k个工作,每个工作都可以在 那两个机器的某种特定的模式下处理,如job[0]既可以在A机器的3号模式下处理, 也可以在B机器的4号模式下处理,机器的工作

2012-08-12 09:30:50 424

转载 Hash函数的设计优化

转自:国家集训队2005论文集 李羽修【摘要】Hash是一种在信息学竞赛中经常用到的数据结构。一个好的Hash函数可以很大程度上提高程序的整体时间效率和空间效率。本文对面向各种不同标本(关键值)的Hash函数进行讨论,并对多种常用的Hash函数进行了分析和总结。 【关键字】Hash 函数,字符串,整数,实数,排列组合 【正文】对于一个Hash函数,评价其优劣的标准应

2012-08-11 15:49:01 1399

原创 poj1840 Eqs

使用hash实现,原式:a1*x1^3+a2*x2^3+a3*x3^3+a4*x4^3+a5*x5^3=0可以推出:a1*x1^3+a2*x2^3 = -(a3*x3^3+a4*x4^3+a5*x5^3) 把O(n^5)转化为O(n^3)+O(n^2)了#includeusing namespace std;short h[25000001];int main(){ int a1

2012-08-11 14:24:12 347

原创 poj 1236 Network of Schools

题意:给定一个有向图,求下面两个量:1 :最少从几个点出发能遍历全图。2 :最少加几条边能使原图强联通。解法:“最少从几个点出发能遍历全图”的点数是将原图缩点后入度为零的点的个数。“最少加几条边能使原图强联通”的边数是将原图缩点后出度为零的点和入读为零的点中的最大值。(注意强联通图的情况)#includeusing namesp

2012-08-10 16:49:07 447

原创 poj 2553 The Bottom of a Graph

题意:给一个定义bottom(G)={v∈V|∀w∈V:(v→w)⇒(w→v)},意思就是在一个有向图中存在一种点v1,这种点满足:v1可达的点集V中所有点,都有一条路径回到v1。先要找出所有的点,按字典序输出。思路:找到出度为0的强联通分量,按字典叙输出其中的点。#includeusing namespace std;const int MAXN =10001;int DF

2012-08-09 03:55:13 339

原创 poj 2186 Popular Cows

使用Tarjan+缩点 完成,算是一道水题,但这题貌似不能用邻接矩阵,会超内存,所以我使用了链表。大概的思路就是求出所有的强联通分量,然后把强联通分量缩为一个点,判断这些新点的出度,如果只有一个出度为0,则输出这个点代表的联通分量中所有点的个数;如果有多个出度为0的点,则输出0。#includeusing namespace std;const int MAXN =10001;int

2012-08-08 22:56:07 436

原创 poj 2983 Is the Information Reliable?

这题参考了别人的思路:由于P  A  B  X 指“确定A到B的距离(边权)为X”从P  A  B  X得到的差分系统为dist[A] - dist[B] >= X  &&  dist[A] - dist[B] 等价于dist[B]  则if(dist[B] > dist[A]-X) 松弛:dist[B] = dist[A]-X由于 V  A  B指“只知道

2012-08-06 10:57:54 341

原创 poj1201

http://blog.csdn.net/rookie_algo/article/details/7833801和1716一样,差分约束,列出以下式子:1、s[bi]-s[ai-1]>=22、s[i+1]-s[i]>=03、s[i+1]-s[i]#includeusing namespace std;const int MAXN = 50001;

2012-08-06 09:58:47 440

原创 poj1716 Integer Intervals

初学差分约束,差分约束的概念还是比较好理解的,但是在题目中的应用对我来说还是不熟练。这道题就是用一个数组dis[x]来记录0-X区间内,点的个数,那么列出3个式子:1、s[bi]-s[ai-1]>=22、s[i+1]-s[i]>=03、s[i+1]-s[i]#includeusing namespace std;int dis[10001];struct edge{

2012-08-06 09:10:52 467

原创 poj 1815 Friendship

拆点法,把一个点拆为两个,之间的流量为点的权值,这样求割点的集合就变为了求割边的集合。#includeusing namespace std;const int maxn=405;const int INF=0x7ffffff;int c[maxn][maxn],dep[maxn],q[maxn],flow[maxn][maxn],num[maxn],pre[maxn];void bfs

2012-08-04 19:11:59 869

原创 poj Secret Milking Machine

题意:有n个点,之间有p条路径(无向,可重复),要求求出要同时存在T条路径(每条边都不重复的条件下),路径中边的最短距离。方法:二分搜索+最大流,二分枚举所有的距离,求出最短的,再构造网络(存在一条边两点之间的通路小于枚举值,两点间的流量自加1),最后的最大流如果是大于#include#includeusing namespace std;const int inf = 0x7fffff

2012-08-02 21:17:18 530

原创 poj3204 Ikki's Story I - Road Reconstruction

题意:有一个国家,有一个物资提供城市(编号为0),它负责通过城市间的路线向该国首都(编号为n-1)传送物资,但这些城市间的路线上传送的物资的量是有限的,所以传到首都的物资太少,所以国王想花钱修某些城市间的道路,使之传送的物资量增多以增加首都物资获得量。为了避免浪费钱力,他想找出那些只要重建(扩建)就能使首都物资获得量增加的道路。问这样的道理有几条。思路:既然首都的物资获得量在未扩建前有

2012-08-02 03:30:51 990

原创 poj2112 Optimal Milking

由于之前没做过多重二分匹配问题,所以一直没有头绪,折磨了我好久,后来看到别人用二分查找+floyd+网络流 来实现,自己也就用这种方法A掉了。具体方法是:1)先用floyd求到任意milking machine到 任意奶牛之间距离2)查找到最长的一条距离,并记录下来为max,那么我们就可以知道,要求的值就是在[0,max]区间3)下面就开始二分查找了,找到0到max之间,最小的

2012-08-01 09:22:55 1307

原创 poj1459 Power Network

水题,难的的1A。。。网络流SAP,增加一个超级源和一个超级汇,而发电站的最大发电量和用电站的最大用电量分别记为从超级源到发电站的最大流量和用电站到超级汇的最大流量。//428K 469MS#includeusing namespace std;const int inf = 0x7fffffff;const int MAXN = 210;const int MAXM = M

2012-07-31 02:15:15 441

原创 poj Drainage Ditches

模版题,很多人A.模版:http://blog.csdn.net/rookie_algo/article/details/7803313#includeusing namespace std;const int inf = 0x7fffffff;const int MAXN = 210;const int MAXM = MAXN*MAXN;int map[MAXN][MAXN];int

2012-07-30 21:41:43 424

原创 网络流算法总结 Edmond-Krap + SAP(GAP优化)+Dinic

花了几天来学最大流问题,折腾的我头都晕了,下面就来让我做个总结。首先介绍一下网络流,流网络G=(V,E)是一个有向图,其中每条边又有一个非负容量c(u,v)>=0,如果存在一条边(u,v)不属于G,那么可以认为c(u,v)=0。网络流中两个点,s(源点)和e(汇点)。一、网络流的三个性质 :1、容量限制:  f(u,v)2、反对称性:f(u,v) = - f(v,u)3、流

2012-07-30 21:36:51 1785

原创 poj3565 Ants

使用KM算法,我写过一个,思路是把蚂蚁和树分为两个集合,但是莫名其妙的错了,然后在网上又查了一段代码,和我的方法相同,甚至代码内容差不多,但人家A了,郁闷啊。。。求助。错误代码:#include#includeusing namespace std;const int MAXN = 101;const int inf = 0x3ffffff;double edge[MAXN][M

2012-07-28 21:44:52 585

原创 poj2195 Going Home

题义:在一个图上,n个人回n个家,可以路过家门而不进去,图中m代表人,H代表家,每人走一步,需要花费1元,求要是这些人都回家,最少花多少。分析:看到题目后首先可以想到的就是人和家是2个集合,人不能与人相连,家也不能与家相连,那么就可给人和家编号,从而构造出一幅2分图,由于可以过门而不入,就说明途中没有障碍物,这就意味着不必去广搜,直接找坐标之间的关系,来确定两点之间的开销。只是一道KM算法

2012-07-28 13:43:31 1110

原创 poj2446 Chessboard

判断是否是完全匹配,和poj3020相似,给格子编号,由于水平不够效率很低,很多大神用的完全匹配,有一点值得学习,就是根据i+j的奇偶性,把点分成两个集合。#include#includeusing namespace std;bool vis[33*33];int result[33*33];bool edge [33*33][33*33];struct c{ int x

2012-07-25 17:04:47 624

原创 poj3020 Antenna Placement

还是一道二分图最大匹配问题,求最小路径覆盖,解题的关键在于如何把城市图转化为二分图。由于题目说,最多覆盖两个城市,可知每两个邻接的城市之间都会有关系。因此把城市编上号就可以构造出一个二分图了。我们需要找的是“最少的关系覆盖所有顶点”,很容易联想到的就是最小路径覆盖。公式:最小路径覆盖 = 顶点数 - (最大二分匹配/2)这是别人写的公式证明:http://hi.baidu.com/soon

2012-07-25 13:33:06 379

原创 poj3041 asteroids

我的第一道二分图匹配题,把矩阵构造为二分图由两部分点集构成,坐标(x,y)出游障碍物即可看为集合A中的x与集合B中的y邻接,问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,即转化为了最小点覆盖问题。由二分图最大匹配的König定理:最小点覆盖数 = 最大匹配数。用匈牙利算法即可求值。#includeusing namespace std;const int MAX

2012-07-25 09:49:25 397

原创 poj2367 Genealogical tree

第一道拓扑排序题,非常水的,就是最基础的实现算法就行。代码如下:#includeusing namespace std;const int MAXN = 105;int edge[MAXN][MAXN];int find_vetex(int T){ int buff; for(int i=1;i!=T+1;i++) { if(edge[i][0]==0) {

2012-07-23 04:21:08 870

原创 poj3026 Borg Maze

这题的测试数据非常坑,一直WA,看了discuss才知道是因为,测试数据后面有还有空格,所以在输入x,y之后要加gets(temp),这道题的解决方法是,先用BFS在查找每两点之间的最短距离,构造出一幅无向图,然后再用prim算法,求出这幅图的最小生成树的权值和。还有一个要注意的地方就是,整个room是可以没有墙的,所以要加判断边界条件(我因此RE了几次)。代码如下:#include

2012-07-22 16:29:32 1211

转载 汇编语言之寄存器使用(bx,si,di,bp)

转载:http://www.cnblogs.com/huzhongzhong/archive/2011/08/01/2123743.html这里对这几个寄存器总结一下。通用寄存器的主要用途寄存器的分类寄存器主 要 用 途通用寄存器数据 寄存器AX

2012-07-22 14:11:40 2906

原创 poj1789 Truck History(最小生成树)

我是通过prim来做的,代码写得很水,一直超时。。。最后1300ms过的,看到别人用相同的方法的只要300ms,一直搞不懂为啥。我的思路是,把题目转化为求最小生成树。两个truck的不同可以看为两点之间的权值。那么,就可以构造出一幅无相完全图,稠密图一般使用prim算法,求出其生成树的权值和即可。#include#includeusing namespace std;const int in

2012-07-21 11:01:51 520

原创 poj1062

就是对迪杰斯特拉算法的应用,不同的人代表不同的节点,旅行者作为起点 与其他点之间的权值就是直接购买货物的价格,其他两点之间的权值就是除了换物品外还要加的价格,其中要注意一点,就是这里有等级限制,所以并不是可以把所有点加进去。这里可以用枚举的思路。#includeusing namespace std;const int MAX = 0x7ffffff;const int MAXN = 1

2012-07-20 23:58:10 396

原创 poj3295

类似于表达式求值,但是更加简单,仅仅是进行逻辑运算而已,其中非的优先级最高,其他的运算优先级都一样。同时要有一点是要进行枚举,一共p,q,r,s,t 5个变量,分别取0,1则有2^5种情况,分别运算 ,若全为真,则记为永真式。#include#include#includeusing namespace std;bool Judge(int p,int q,int r,int s,

2012-07-20 23:47:59 886

空空如也

空空如也

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

TA关注的人

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