![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 68
kaiweisun
这个作者很懒,什么都没留下…
展开
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。是C++中多态性的一个重要体现,利用基类指针访问派生类中的成员 函数,这种情况下使用虚函数,这种情况下采用的是动态绑定技术。 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一...原创 2013-08-29 14:34:12 · 161 阅读 · 0 评论 -
poj 1838
题意:有一只猴子喜欢吃香蕉,但他只能在相邻的两棵香蕉树之间行动,如果两棵树是在横方向或竖方向相邻的,那么这就组成一个区域,这个区域内猴子可以随意走动,有人可以把k个区域连接起来,从而使猴子在这k个区域内随意行动,问猴子最多可以在多少棵树内走动?给定n个树的坐标,和k。思路:由于是区域相连接,所以可以想到用并查集这个数据结构进行操作。使用并查集来对这n个点进行操作,最后选出前k个最大的根节点相加...原创 2012-03-09 09:44:26 · 94 阅读 · 0 评论 -
poj 1828
题意:这道题目是求猴王到底有多少个,猴王的定义是 以他为坐标的。。。没有点的x轴和y轴均大于他,那么这个猴子就被成为猴王,显然猴王不只一个。开始我还一直以为猴王不是一个就是两个。解题思路:首先将输入的猴子按照位置排序,先按x从小到大排列,若x相同则再按y从小到大排列,然后对于排序好的数组,按照从后到前的顺序扫描,由于前面的猴子x不比后面的猴子x大,则若要当大王则必须要y比其后最大的y要...原创 2012-03-08 14:30:18 · 113 阅读 · 0 评论 -
poj 1788
题意:其实这道题英文描述挺复杂,但是看清楚题目的要求之后发现,这道题的实际意图就是求一个规则多边形的边长,而且由于两两的点都是在一条直线上,所以也没有必要去计算欧式距离,只需要对点进行排序就行了。先对X点就行排序,再对Y点进行排序即可,这道题就是一个根据两次排序来求边长的题 思路只要清楚了就好计算了,代码如下#include <iostream>#include <a...原创 2012-03-08 10:45:06 · 122 阅读 · 0 评论 -
poj 1723
大意,给定一堆点的坐标,每个点可以上下左右一格一格地移动。要把这堆点一个接一个地排列在一条水平线上,求最少的移动步数。 数学思维的题目啊……我知道我又做不出来的,脑力不够啊!!! 一开始我想的是把纵向、横向的移动分开处理。我在想要确定那条直线,让所有的点都落到上面去。于是我又想是不是那条直线要通过尽可能多的点,接着就陷入了无限怨念的证明过程,证明一个错误的结论……我还想到,如...原创 2012-03-01 21:16:01 · 178 阅读 · 0 评论 -
POJ 1423
问题描述:输入一个整数n(1,10^7),要你输出该整数的阶乘后的位数是多少? 问题分析:由于n的输入数可能较大,倘若按照常规算法(就是算出n的阶乘)设计的话,一方面会出现TLE,另一方面会出现数据溢出的情况。所以我们不得不充分利用数学知识里面的对数与指数间的亲密关系。 但 是有没有办法不求这个阶乘,所以得用到stirling逼近 n!=(n/e)^n*sqrt(...原创 2012-03-01 10:38:59 · 113 阅读 · 0 评论 -
poj 1018
题目大意:一套通讯系统由一些设备组成,每种设备由不同的供应商供应,每个供应商供应的同种设备有各自的带宽(bandwidth)和价格(prices)。通讯系统的带宽(B)指的是组成该系统的所有设备的带宽的最小值,通讯系统的价格(P)指的是组成该系统的所有设备的价格之和。求最大的 (B / P)。思路分析:先枚举出所有供应商所供应的所有设备的最小带宽和最大的带宽,从最小带宽开始枚举,用...原创 2012-02-23 15:50:38 · 66 阅读 · 0 评论 -
POJ 3370
题目大意是给出n和m及m个整数(n<m),要从m中找出任意个数使得其和是n的倍数,输出时就输出每一个数所在的编号例如对于题目中的数据二,明显可以找出11,2,5,他的和是18,是3的倍数,而11,2,5对应于题目中的数据分别是2,3,4,故结果输出的是2,3,4当然,除了2,3,4这一个解,还有1,2也是题目的解,但题目要求对于多解的情形只用输出一组解,如果无解,就输出“no s...原创 2012-02-22 20:14:17 · 156 阅读 · 0 评论 -
POJ 2049
题意:一串由n个珠子组成的项链,用c种颜色涂染,问能形成多少种不同项链。限制:旋转得来的为同一种,翻转得来的也为同一种。运用polya定理解题。Polya定理 设有n个对象,G是这n个对象上的置换群,用m种颜色涂染这n个对象,每个对象涂染一种颜色,问有多少种染色方案?一种染色方案在群G的作用下变为另一种方案,则这两种方案当作是一种方案。针对本题分两种情况讨论:旋转:n...原创 2012-02-22 15:44:35 · 104 阅读 · 0 评论 -
poj 3083dfs+bfs问题
题意:给你一个h * w的迷宫,其中有一句话需要注意一下“Exactly one 'S' and one 'E' will be present in the maze, and they will always be located along one of the maze edges and never in a corner.”即始点‘S’和终点‘E’一定都与迷宫的边界相邻,这对做题很...原创 2011-11-21 21:29:26 · 94 阅读 · 0 评论 -
字典树学习材料
字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。Trie树示意图如附件图所示:该trie树存有abc、d、da、dda四个字符串,如果是字符串会在节点的尾部进行标记。没有后续字符的branch分支指向NULL...原创 2012-05-30 14:29:09 · 60 阅读 · 0 评论 -
poj 1159
题目大意:给你一段字符串,让你求出在中间最少加入几个字符可以让他变成一段回文子串。解题思路:假设S是一段字符串,S'是S的逆串,则只需求出S与S'的最长公共子序列即可的长度即可,最后用字符串的长度减去最长公共子序列的长度即是这道题目所求的加入的字母的长度。转化为LCS问题即可 注意:本题的内存开销非常大,由于题目中给出0<=N<=5000,1. 静态数组 开销大小...原创 2012-05-28 19:08:32 · 222 阅读 · 0 评论 -
poj 3176
大致题意:输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。解题方法:用二维数组way[][]靠左存储三角形内的数据,那么连线规则变更为way[i][j] → Way[i+1][j]或 Way[i][j] → Way[i+1][j+1] 注意:w...原创 2012-05-28 14:47:46 · 202 阅读 · 0 评论 -
poj 1260
题意解释:有n个等级的珠宝,等级依次升高,等级越高价钱越高,每买一个等级的任何数量的珠宝必须多付10颗此种珠宝的价钱,可以用高等级的珠宝代替低等级的,问要买到若干规定的数量和等级珠宝的最少花费。例如买5颗价值为10的、100颗价值为20的珠宝,有两种方案:一种为分别买两种等级的珠宝价钱为(5+10)*10+(100+10)*20 = 2350;另一种是将等级低的(即价格低)的珠宝全部换为等级高...原创 2012-05-28 09:54:52 · 85 阅读 · 0 评论 -
poj 1836
是POJ2533的扩展题。题意不难,令到原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。就是使新队列呈三角形分布就对了。士兵的排列就是如附件所示所示:图片中的蓝色士兵的身高和红色士兵的身高是完全没有关系的。要求最少出列数,就是留队士兵人数最大,如图:即左边的递增序列人数和右边的递减序列人数之和最大因而可转化为求“最长不降子序列”和“最长不升...原创 2012-05-28 09:22:33 · 96 阅读 · 0 评论 -
poj 2533
在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗称最长不下降子序列,最长不下降子序列是一个非常常见的小问题,首先让我们了解一下什么是LIS一 LIS描述如下:设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lis=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<...原创 2012-05-26 15:36:36 · 114 阅读 · 0 评论 -
poj 3267
从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况,只有可以匹配单词时才进入第二条方程进行状态优化更新。题意就是给出一个主串,和一本字典,问最少在主串删除多少字母,可以使其匹配到字典的单词序列。PS:是匹配单词序列,而不是一个单词 不多说,看程序主要是知道状态方程的含义dp[i]表示从message中第i个字符开始,到第L个字符(结尾处)这段区间所删除的字符数,...原创 2012-05-26 09:43:55 · 72 阅读 · 0 评论 -
poj 2376
题目描述:有N头牛要擦长度为len的地板(起始位置从1开始),给你每头牛能够擦地板的区间,要求,地板必须全被擦到,求出最少需要几头牛可以完成任务。如果不能使所有的地板都被擦到则输出-1. 解题思路:贪婪算法。设每头牛擦地板的区间为xi-yi,则先按照xi从小到达排序,如果xi的值相同,则按照yi的值从大到小排列,显然如果x1>1,则输出-1.因为1-2的地板没有牛可以擦。设...原创 2012-03-14 15:43:40 · 83 阅读 · 0 评论 -
poj 2377
题意:Bessie为了报复雇主,决定将雇主让他做的工作竟可能的做得很糟糕,他的想法如下: 1>使整个网络的花费竟可能的最大; 2>保证建成的网络是连通图,即任意两定点之间都存在路径; 3>建成的网络没有环(即回路)存在. 现在要求建成该网络的最大花费,如果建成的网络...原创 2012-03-15 16:02:23 · 82 阅读 · 0 评论 -
poj 2380
题意:这道题想了很久很久才理解题意。题目描述很简单,就是给出几组数据,分别表示商品的id号,商品的销售点,以及商品在销售点的销售额。目的要求你给出一个数组,其中数组的首行按照商品的id号从小到大排列,首列按照商品的销售点从小到大排列,数组里面的值代表某件商品在某个销售点的销售额。思路分析:刚开始考到这个题目的时候,觉得无从下手,结果思考一下,发现这个也仅仅是个排序题而已。只需要将商品的id号升...原创 2012-03-15 21:17:34 · 99 阅读 · 0 评论 -
poj 2021
题意:Ted今年100岁,给出n对他家族的关系:“父亲名,孩子名,生孩子时父亲年龄”,求出家族所有人现在的岁数。思路:基础题,可以用bfs做。要注意排序输出时,当年龄相同,要按姓名的字典顺序输出。代码如下:#include<iostream>#include<cstring>#include<algorithm>using ...原创 2012-04-19 15:00:26 · 184 阅读 · 0 评论 -
poj 1656
题目要求:一道纯的模拟题目。直接上代码: #include <iostream>#include <cstring>using namespace std;int board[101][101];int main(){ int t; cin>>t; char c[10]; int i,j; ...原创 2012-04-19 10:07:28 · 87 阅读 · 0 评论 -
poj 1338
题意:题目意思是求由2,3,5的乘积组成的数从大到小排列,从1开始,2,3,4,5,6,8,9,。。。基本思想是设3个指针,分别表示3个素数乘到哪了,然后通过比较3个指针位置的递推结果来确定下一个数是什么。代码如下:#include <iostream>using namespace std;int a[1510];int main(){ a[1...原创 2012-04-23 10:20:54 · 164 阅读 · 0 评论 -
poj 3122
题意:作者要开一个生日party,他现在拥有n块高度都为1的圆柱形奶酪,已知每块奶酪的底面半径为r不等,作者邀请了f个朋友参加了他的party,他要把这些奶酪平均分给所有的朋友和他自己(f+1人),每个人分得奶酪的体积必须相等(这个值是确定的),形状就没有要求。现在要你求出所有人都能够得到的最大块奶酪的体积是多少? 思路:贪心的思想+二分。复杂度为O(nlogM),M为初始时的high...原创 2012-12-11 19:51:25 · 138 阅读 · 0 评论 -
poj 3273
题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份都是连续的天),要求每份的和尽量少,输出这个和。 一开始二分的上界为n天花费的总和(相当于分成1份),下界为每天花费的最大值(相当于分成n份),然后二分,每次的mid值为(上界 + 下界)/ 2,然后根据mid值遍历n天花费,对n天的花费进行累加,每当超过mid值 份数++,看看这个mid值能把n天分成几份,如果份数大于m,表示m...原创 2012-12-11 16:49:56 · 99 阅读 · 0 评论 -
排序算法总结
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 冒泡排序是稳定的,算法时间复杂度是O(n ^2)。 2.2 选择排序(Selection Sort) 选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的...原创 2013-05-17 11:00:28 · 73 阅读 · 0 评论 -
poj 1182
建议:做此题之前先做 poj 2524 和 poj 1611。这两道题都是并查集的基础应用。关键词:并查集 相对关系思路:(用一个并查集就够了,同时对每个节点保持其到根结点的相对类别偏移量) 1.father[x]表示x的根结点。rank[x]表示father[x]与x的关系。rank[x] == 0 表示father[x]与x同类;1表示father[x]吃x;2表示x吃father[x]。...原创 2012-04-18 16:42:38 · 77 阅读 · 0 评论 -
poj 2371
题意:就是一个排序,然后询问第几大的数,输出。。无聊代码如下:#include <iostream>#include <algorithm>using namespace std;int main(){ int N,k; int a[100010]; char s[10]; while (cin>>N) {...原创 2012-04-16 16:53:13 · 101 阅读 · 0 评论 -
poj 2231
题意:这道题目意思是要求直线上N个点相互之间距离的总和。代码如下:#include <iostream>using namespace std;__int64 a[10001];int main(){ int i,j,N; while (cin>>N) { for (i=0;i<N;i++) scanf("%...原创 2012-04-16 16:35:22 · 103 阅读 · 0 评论 -
poj 2092
题目很水,就是求出现次数为第二大的有多少个,输出来就OK代码如下:#include <iostream>using namespace std;int main(){ int a[10001]; int m,n,i,j,b,Max; while (scanf("%d%d",&m,&n),m||n) { Max=0;...原创 2012-04-12 15:36:48 · 491 阅读 · 0 评论 -
poj 1033
题目大意:你要写一个OS,要实现磁盘碎片整理的功能。磁盘分为N个簇,一个文件可以占用K个簇,(1 <= K < N <= 10000),给出各个文件的占用磁盘的情况,也就是一个文件占用了哪些簇,想要进行碎片整理,就是把这些簇按顺序整理到磁盘的最顶部,例如给出示例:文件1:2 3 11 12,占用了4个簇,编号为1-4。 文件2:7,占用了1个簇,编号为5。 文件3:...原创 2012-04-11 16:50:42 · 110 阅读 · 0 评论 -
poj 1974
题意:有一只蠕虫居住在一个m*n大小的网格中,在网格的某些位置放置了k块石头,当蠕虫睡觉时,它在水平方向或垂直方向上躺着,把身体尽可能伸展开来,蠕虫的身体既不能进入到放有石块的方格中,也不能伸出网格外,而且蠕虫的长度不会短于2个方格的大小.现在给定一网格,要求计算蠕虫可以在多少个不同的位置可以躺下睡觉.题目中有两点需要注意: 1>当蠕虫睡觉时,它在水平方向或垂直方向上躺...原创 2012-03-29 16:38:41 · 619 阅读 · 1 评论 -
poj 1971
题意:给出你一堆坐标点,让你求出这些点组成的平行四边形的个数思路:求出这些点组成的点组成的线段的重点,如果两条线段的中点相同,则这两条线段组成一个平行四边形。 代码如下:#include <iostream>#include <algorithm>using namespace std;struct point { int x,...原创 2012-03-29 14:43:35 · 113 阅读 · 0 评论 -
poj 1928
题意:题意:dodo要在规定时间内拿peanut,每次拿peanut都是从最多的那堆拿起,因此需要将peanut的数量从大到小排序,走路的规则:1.从road走到field需要一个单位时间2.在方格内走每一个格的时间是一个单位时间3.每捡起一堆peanut要用一个单位时间4.从field走到road需要一个单位时间思路:题目中提到"根据鲁兵逊先生的要求,多多首先走到花生最多的植株,采摘这颗植株...原创 2012-03-29 10:56:40 · 92 阅读 · 0 评论 -
poj 1877
问题:有一块由N*M个正方形构成的地形,每块面积是100平方米,每一块都有自己的海拔。假定雨水不会流出边界,不会渗入地下,问当降雨量为v时,会有百分之多少被雨水覆盖。解题思路: 由于题目中特别声明水无论如何都会流到当前水面最低的地方,使得问题一下子简化了。很容易想到以下贪心算法:1) 把每个格子的高度排序;2) 以低格子到高格子的顺序填水,把水均匀的铺在当前的水面上,并不断更新当前水面面积...原创 2012-03-28 16:10:47 · 222 阅读 · 0 评论 -
poj 1318
题意:给定一个字典,字典里最多有100个单词,每个单词最多6个字母,输入:按照一定的方式输入字母,看在字典中是否有具有相同字母的单词,若有,将其输出,若无输出NOT A VALID WORD思路:先将字典中的字符串转化为标准形式,即按字典序。判断一个字符是否能由另一个重新排列,只需判断其标准形式是否相等。先找出能相互转化的,再对其排序输出。采用了2种快速排序,一种用来得到其标准序列,另一个对满...原创 2012-03-23 17:35:30 · 128 阅读 · 0 评论 -
poj 1276
题意:这道题的意思是给你一堆钱,各种面值的都有,比如10块的5张,5块的3张,2块的1张,请找出利用这些钱可以凑成的最接近且小于给定的数字cash的数额,比如cash=33块。我们可以取3张10块+2张1块=32,就是我们可以找到的那个最接近且小于33的数额。思路:多重背包问题的一种变形运用,比较简单。dp[i]用来表示第i大小金额的值是否能够取到。代码如下:...原创 2012-05-25 16:20:00 · 181 阅读 · 0 评论 -
poj 1094
题意:给出字母个数,和有限个有序对(a<b)求出能确定字母序列的最少的条件个数.即,从第一个条件开始,往下,当加入某一条件时,如果能够确定这个序列,则输出这个序列,如果得出矛盾则说明冲突,如果所有条件都完毕也没有结果,则输出不能确定.思路:每读一个有序对,添加一条边,然后对其拓扑排序,如果成功,则输出序列,如果不成功,判断其是否有环,如果有环,输出冲突,如果没有定论,则读入下一个有序对.当所...原创 2012-05-25 13:54:08 · 75 阅读 · 0 评论 -
数据结构-排序问题
排序分为以下几大类:a:插入排序;b:选择排序;c:交换排序;d:归并排序;e:基数排序。 a:插入排序:分为直接插入排序与希尔排序。直接插入排序的思想是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n...原创 2011-10-25 16:40:28 · 233 阅读 · 0 评论 -
poj 2388
题意大概是农场主要找出体重处于中间的母牛,实际上是要求在规定时间内给出一组数据的中间数,说白了,就是各种排序,数据的个数是奇数,n/2正好处于中间,可以用STL模板,也可以不用,代码分别如下:代码一:不用STL模板。自己写的快速排序:#include <iostream>using namespace std;const int Max=10002;void ...原创 2011-10-25 15:02:40 · 125 阅读 · 0 评论