算法
文章平均质量分 73
ices_
本科生
展开
-
电话聊天狂人 c++ stl
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。输入格式:输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。输出格式:在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出...原创 2018-09-16 23:26:27 · 475 阅读 · 0 评论 -
多源最短路径之Floyd算法
#include#include#include#define MAX 999using namespace std;int n,m;int e[MAX][MAX];void Init(){ for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) { if(i==j)原创 2017-07-30 23:18:30 · 431 阅读 · 0 评论 -
最短单源路径之dijkstra算法
#include#include#include#define MAX 999using namespace std;int dis[MAX];int n,m;int d[MAX][MAX];int Min,flag;bool vis[MAX];int dijkstra(){ for(int i=1; i<=n; ++i) { if(d[m][原创 2017-07-30 22:21:09 · 427 阅读 · 0 评论 -
Fence Repair POJ - 3253 最小优先队列,哈弗曼树
首先拿用例来说明一下题意给个一根长度为21的模板,目标是把它分为三块,长度分别是8,5,8切割的时候先把他切割成长度为8和13的,消耗21,然后再把长度为13的模板切割成长度为5和8的,消耗13然后总消耗就是21+13=34求最小总消耗我用的是哈弗曼树来实现,需要注意的是输入n==1,也就是分成一块的时候,这时候直接弹出队列并输出木板长度,否则根据哈夫曼计算总消原创 2017-07-15 19:18:07 · 375 阅读 · 0 评论 -
Squares POJ - 2002 hash函数
题意是给给定一个数值n输入n组数,求由n组数能组成多少个正方形、此题如果直接用4层循环查找的话 时间复杂度是10的12次方我们选择先找两个点,然后计算出另外两个点,再查找是否给出了这两个点来计算answer可以把给出的每个点做一个哈希映射,此题选择的是x*x+y*y;#include#include#include #define prime 1999using原创 2017-07-14 23:49:48 · 295 阅读 · 0 评论 -
Eqs POJ - 1840 hash表
题意是给出一个五元三次方程组的五个系数求共有多少组解题目限制时间是5000Ms如果直接用暴力求解的话5层循环,每层100次,100的5次方,肯定不行转换一下方程组-(a*x1*x*x1+b*x2*x2*x2)=c*x3*x3*x3+d*x4*x4*x4+e*x5*x5*x5这样就降到了100的三次方,100万然后我们用hash映射,将前面的结果算出来映射到has原创 2017-07-14 10:57:24 · 390 阅读 · 0 评论 -
Gold Balanced Lineup POJ - 3274 Hash表应用
先说题意把,从网上找到了一个能很好解释题意的图片下面我以此题举个例子此题的输入如下7 3 7672142也就是说有7头牛将下面输入的7个数字每个数字都可以先转化内位数不超过3位的二进制数(注意顺序是从右向左)先来转一下 1 2 3 序号7 1 1原创 2017-07-13 22:21:37 · 367 阅读 · 0 评论 -
最小重量机器设计问题
#include#include#include#include#includeusing namespace std;int n,m,d;int price[100][100];int weight[100][100];int minw=99999;string answer;struct Node{ int geshu; int sum_cost;原创 2017-06-23 21:25:09 · 613 阅读 · 0 评论 -
Snowflake Snow Snowflakes POJ - 3349 hash表问题
题意是给出一组雪花的6个角的值,判断通过比较是否能发现两片相同的雪花。主要利用了hash表的映射,计算每个雪花的key值,如果不存在以此key值为键的hash表,则新建一个,若存在则查找hash表,如果有则标记Find为ture否则通过hash重映射方法,继续向以此key值为键的hash表添加数据。判断的时候需要分顺时针和逆时针两种比较方法。#include#原创 2017-07-12 17:37:41 · 458 阅读 · 0 评论 -
Ultra-QuickSort POJ 2299 归并排序算法
题意是给出一个数组,用冒泡排序的方法将数组排序,求需要多少趟才能排完此题如果直接按照冒泡排序的方法排序并计算次数会超时,因为时间复杂度是O(n2)其实分析一下,我们只要求出给出的数组中有多少个逆序对即可,下面的一种解法采用了归并排序的方法来求逆序对数。#include#includeusing namespace std;int a[500010];long long原创 2017-07-12 15:03:57 · 332 阅读 · 0 评论 -
冒泡排序
冒泡排序是一种简单的排序方法,一般不适用于规模比较大的排序,而且效率比较低,不过作为入门级别的排序方法,我们还是有必要学习一下学习冒泡排序之前,我们先来讲解一个简单的排序方法,先上代码#include #include #include #include#include#includeusing namespace std;double random(原创 2017-07-12 08:25:57 · 499 阅读 · 0 评论 -
Who's in the Middle poj 2388
很简单,排个序就行了#include #include #include #includeusing namespace std;int a[10050];bool cmp(int a,int b){ return a<b;}int main(){ int n; cin>>n; for(int i=0; i<n; ++i)原创 2017-07-12 08:26:09 · 460 阅读 · 0 评论 -
Babelfish POJ - 2503
题意很简单,先给出一组相互映射的字符串组,左边的str1和右边的str2对应接下来输入一行回车接下来每输入字符串,判断之前是否输入过str2,如果没有则输出eh,否则输出str1直接给出代码#include#include#include#include#define prime 1999using namespace std;char answer[15];原创 2017-07-22 13:51:12 · 357 阅读 · 0 评论 -
A Knight's Journey POJ - 2488 dfs水题
骑士的遍历问题直接上代码#include#include#include#define MAXN 100using namespace std;int vis[MAXN][MAXN];int r,c;int sum;int answerX[1010];int answerY[1010];int dir[8][2]= {{-1,-2},{1,-2},{-2,-1}原创 2017-08-07 16:50:41 · 333 阅读 · 0 评论 -
Wormholes POJ - 3259 floyd算法求负环
题意是给出N个点,Dou个边,每个边需要花费V时间,然后给出Sig个单项边,每个边花费时间-V问能不能从某个点开始走,转一圈回到这个点其实就是求负环用的是Floyd算法#include#include#define MAX 10000000#define len 510using namespace std;int n;int dou,sig;int edg[原创 2017-07-31 20:47:12 · 696 阅读 · 0 评论 -
希尔排序原理与代码实现c++
希尔排序是直接插入排序的一种,一般直接插入排序适用于基本有序的排序表和数据量不大的排序表。希尔排序的原理是,先将待排序表分割成若干个步长为dk的子表,举个例子下面的无序排列8 0 4 1 5 3 7 6 2 9初始的时候dk设置为数组长度的一半也就是5,那么第一次排序后可以达到这样的效果,处于第1个位置的元素比第1+5个位置的元素小,第1+5个元素的位置比第1+10个元素的位置小;...原创 2018-09-16 22:11:48 · 581 阅读 · 0 评论 -
ccf有趣的数 dp
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 3. 最高位数字不为0。 因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。 请计算恰好有n位的有趣的数的个数。由于答案可能非常大,只...原创 2018-09-16 00:31:50 · 381 阅读 · 0 评论 -
字符串模式匹配(简单模式匹配算法与KMP算法)(一)
一般的字符串模式匹配算法是类似下面的逐次匹配,举例说明如下主串s=ababcabcacbab从串t=abcac一般匹配方法如下图所示代码如下int index(string s,string t){ int i=0,j=0; int l1=s.length(); int l2=t.length(); while(i<=l1-1&...原创 2018-09-05 20:57:33 · 11326 阅读 · 0 评论 -
Stockbroker Grapevine POJ - 1125
floyd多源最短路径#include#include#include#define inf 20 using namespace std; int dis[110][110];int i,j,k,n;void floyd(){ for(k=1; k<=n; ++k) for(i=1; i<=n; ++i) for(j=1; j<原创 2017-08-06 11:56:43 · 340 阅读 · 0 评论 -
Frogger POJ - 2253
Floyd算法问题#include#include#include#define MAXN 220#define INF 123456789#include#includeusing namespace std;int n;double dis[MAXN][MAXN];struct Point{ double x,y;} point[MAXN];double原创 2017-08-06 11:20:55 · 348 阅读 · 0 评论 -
动态规划 背包问题 poj 1837 Balance
#include#include#includeusing namespace std;int dp[25][15010];int main(){ int n,g; int c[30]; int w[30]; cin>>n>>g; for(int i=1;i<=n;++i){ cin>>c[i]; } for(int i=1;i<=g;++i){原创 2017-08-20 17:25:29 · 390 阅读 · 0 评论 -
昂贵的聘礼 POJ - 1062 dfs
这道题网上大部分都是用单元最短路径做的,我一开始想到的方法是dfs,因为这种思路就是跟着题目中的逻辑来实现的然后其中有一个坑,坑住我了,就是判断级别的时候,直接在一开始进行判断,我一开始wr了好多了,就是因为在当前节点的某个分支处才判断,其实在一开始就要判断,因为如果等级差超过了给定的m,也不能用直接获取当前节点不打折的价钱的方法进行购买下面是代码#include#include原创 2017-08-05 15:05:57 · 369 阅读 · 0 评论 -
Colored Sticks POJ - 2513 并查集,字典树,欧拉回路
这道题涉及的知识点比较多前面的博客是为这道题打基础步入正题,题意是说给出一堆木棒,每根木棒的左边和右边颜色不一样,求能否将所有的木棒按规则连成一条直线,规则是相连的木棒端点处颜色必须一致。如果可以输出Possible例如题目中给出的例子(后面的序号是我自己加的)blue red 1red violet原创 2017-07-26 14:02:49 · 405 阅读 · 0 评论 -
畅通工程 HDU - 1232
题意是给第一行两个数,n是城市数,m是给出的已经形成通路的道路数,求还需要多少个通道才能使每两个城市之间都形成通路。上篇博客文章讲了并查集,知道了并查集就很容易做出来,可以这样想,由给出的数据先算出目前已经有了多少个互相形成同路的集合 拿题目中给出的数据举个例子 4 2 1 3 4 3 其中 1 3 4 已经形成通路,2单独形成一个通路,因此如果想要城市之间两两形成同路,则只需要再构原创 2017-07-25 00:09:30 · 375 阅读 · 0 评论 -
并查集
今天讲一下并查集 首先说明一下,我是看到 并查集由一个整数型的数组和两个函数构成。数组pre[]记录了每个点的前导点是什么,函数find是查找,join是合并。find(int x){ int r=x; while(r!=pre[r])//若r的前导点不是它本身 { r=pre[r];//查找 } //路径压缩 int i=x,j原创 2017-07-24 22:17:48 · 238 阅读 · 0 评论 -
多泳道(队列)问题 标准输出问题
问题描述:发神给我出的一个题给出一个数n输入n个 1-n 的数,不能重复,求使上述输出的数转换为正序排列的数的最小泳道数条件:可以利用多个泳道(也就是队列),每个泳道可以装若干个数//思路 每个数前面的数只能是比次数小的,不能是比次数大的,如果当前不存在一个泳道的最后一个数小于要加如的数,则size++,//如果存在多个符合条件的,则插入到当前泳道中队尾最大的原创 2017-07-17 01:27:16 · 807 阅读 · 0 评论 -
All in All POJ - 1936 (串)
这道题非常水,题意是判断前面的串是否是后面串的子串(前面串的每个字符在后面串都出现,并且出现顺序是前面串每个字符的出现顺序即可)#include #include #include #includeusing namespace std;char s1[100010],s2[100010];int main(){ while(~scanf("%s %s",原创 2017-07-11 21:16:17 · 278 阅读 · 0 评论 -
Blue Jeans POJ 3080 (串)
题意很简单,找最长且字典序最大的公共子串,并且长度不能小于3方法是暴力,找出第一个字符串的所有子串,依次与后面的字符串匹配。#include #include #include #includeusing namespace std;char a[15][65];char temp[65];char answer[65];int len;int k;int Fi原创 2017-07-11 21:05:03 · 309 阅读 · 0 评论 -
(二分)4 Values whose Sum is 0
The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d ) ∈ A x B x C x D are such that a + b + c + d = 0 . In the follow原创 2017-04-17 01:06:47 · 763 阅读 · 0 评论 -
(动态规划)Filthy Rich
They say that in Phrygia, the streets are paved with gold. You’re currently on vacation in Phrygia, and to your astonishment you discover that this is to be taken literally: small heaps of gold are原创 2017-04-16 00:41:38 · 444 阅读 · 0 评论 -
(贪心)悼念512汶川大地震遇难同胞――老人是真饿了
Input输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0Output对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。每个实例的输出占一行,保留2位小数。Sample Input17 23 34 4Sample Output2.33#include#include#include#i原创 2017-04-15 23:25:35 · 461 阅读 · 0 评论 -
(贪心算法)Wooden Sticks
贪心算法原创 2017-04-15 19:54:25 · 666 阅读 · 0 评论 -
(贪心,区间选点问题) Radar Installation POJ 1328
Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the原创 2017-05-01 21:54:41 · 373 阅读 · 0 评论 -
(枚举,dfs)The Pilots Brothers' refrigerator poj 2965
The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to open a refrigerator.There are 16 handles on the refrigerator door. Every handle can be in one of two原创 2017-05-01 19:39:45 · 423 阅读 · 0 评论 -
(枚举,dfs)Flip Game poj 1753
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is lying either it's bl原创 2017-05-01 18:57:40 · 285 阅读 · 0 评论 -
(dfs算法) Fire Net
Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall.A blockhouse is a small castl原创 2017-04-15 15:02:32 · 354 阅读 · 0 评论 -
(贪心)折线分割平面
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。Input输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0Output对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。原创 2017-04-27 15:49:08 · 366 阅读 · 0 评论 -
字符串”水“题
题目描述给出一个长度为n的字符串(1输入第一行一个正整数T,表示数据组数(1 接下来T行,每行有一个只包含小写字母的字符串。 输出每个答案输出满足要求字符串个数。每个答案占一行。 样例输入3aaabbccabcabc样例输出061这道题用到了字符串的状态压缩首先来解释一下亦或的用法举个例子aba原创 2017-04-25 07:39:37 · 1023 阅读 · 2 评论 -
瑞神要考研
题目描述瑞神要准备考研了,为了复习数据结构,瑞神在某宝上买了一本数据结构得考研辅导资料《考研数据结构---从入门到放弃》,从此瑞神开始了愉快的复(zhuang)习(bi)。有一天,瑞神找了好多条链表来辅助自己复习,但是他在复习的过程中一不小心把链表掉在了地上,捡起来的时候链表以及断成了好多个结点,每个结点只保留了当前结点的地址、结点的值和下一个结点的地址。瑞神看着这些结点浑身难受无法复习,原创 2017-04-24 16:07:58 · 597 阅读 · 0 评论 -
模拟法(poj 1068)Parencodings
Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways:q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith原创 2017-05-03 17:15:14 · 394 阅读 · 0 评论