自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

acm_JL的博客

acm 进阶之路

  • 博客(139)
  • 收藏
  • 关注

原创 2005年浙江大学计算机及软件工程研究生机试真题

题目1010:A + B题目描述: 读入两个小于100的正整数A和B,计算A+B.需要注意的是:A和B的每一位数字由对应的英文单词给出.输入: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.输出: 对每个测试用例输出1行,即A+B的值.样

2016-03-31 09:05:14 1002

原创 2010年浙江大学计算机及软件工程研究生机试真题

题目1008:最短路径问题题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入: 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结

2016-03-31 08:55:50 861

转载 并查集详解

并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判

2016-03-30 10:18:08 595

转载 最短路径—Dijkstra算法和Floyd算法

Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,E) 中,假

2016-03-29 00:21:34 1850

原创 2011年浙江大学计算机及软件工程研究生机试真题

题目1001:A+B for Matrices题目描述:     This time, you are supposed to find A+B where A and B are two matrices, and then count the number of zero rows and columns.输入:     The input consists of

2016-03-25 10:12:15 2339

原创 堆排序

堆排序       堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆  堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:  Key[i]=Key[2i+1]&&key>=key[2i+2]  即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。  堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为

2016-03-23 20:51:19 363

原创 快速排序

#includeusing namespace std;int a[100],n;void swap(int *a,int *b){ int t; t=*a; *a=*b; *b=t; } void Qsort(int *a,int left,int right){ int i,j; if(left<right) { i=left; j=right+1; d

2016-03-23 20:39:25 533

原创 冒泡排序

算法思想:第一趟在序列(A[0]~A[n-1])中从前到后进行两个相邻元素的比较,若后者小,则交换,比较n-1次;第一趟排序结束,最大的元素被交换到A[n-1]中,下一趟排序只需要在子序列(A[0]~A[n-2])进行,如果在某一趟排序中未交换元素,说明子序列已经有序

2016-03-23 20:37:52 488

原创 直接插入排序

算法思想:将序列的第一个元素作为一个有序序列,然后将剩下的n-1个元素按照关键字大小依次插入该有序序列,每插入一个元素后依然保持该序列有序,经过n-1次排序后就成为有序序列。#includeusing namespace std;void insert(int *a,int n){ for(int i=1;i<n;i++)//n-1趟 { int j=i; in

2016-03-23 00:21:07 376

原创 简单排序算法

算法思想:将初始序列(A[0]~A[n-1])作为待排序序列,第一趟在待排序序列(A[0]~A[n-1])中找最小值元素,与该序列中第一个元素A[0]交换,这样的子序列(A[0])有序,下一趟排序在待排序子序列(A[1]~A[n-1])中进行。第i趟排序在待排序子序列(A[i-1]~A[n-1])中,找最小值元素,与该子序列中第一个元素A[i-1]交换。经过n-1趟排序后使得初始化序列有序。

2016-03-22 23:52:10 530

原创 高精度--乘法

#include #include #include using namespace std;void multiply(const char *a,const char *b){ int i,j,ca,cb,*s; ca=strlen(a); cb=strlen(b); s=(int *)malloc(sizeof(int)*(ca+cb));

2016-03-22 22:32:30 499

原创 高精度-加法

#include#include#include#include#includeusing namespace std;#define MAX 1010int a[MAX], b[MAX];int main(){ int N, len1, len2, i, k, up, tmp, ncase = 1; string str1, str2; scanf("%d", &N);

2016-03-22 22:14:33 562

原创 POJ 2752 Seek the Name, Seek the Fame

题目大意  :给定一个字符串,求其相同前缀后缀的长度,由小到大输出所有情况题目分析  :用到KMP算法中的next数组,本题时next数组的一种新用法,要深刻理解next数组的含义,由KMP算法的原理可知,通过遍历next[len], next[next[len]].....可以得到所有同时满足是原串的前缀和后缀的子串长度.下标  :  0   1   2   3   4   5 

2016-03-22 20:35:16 299

原创 POJ 3461 Oulipo

给两个字符串,在目标串里找到模式串的个数。#include #include char text[1000005];char word[10005];int next[10005];//改进后的next数组,速度更快void get_next() { int j = -1, i = 0; next[0] = -1; while(word[i] !=

2016-03-22 20:23:11 378

原创 POJ 3080 Blue Jeans

题意:就是求k个长度为60的字符串的最长连续公共子串,21、  最长公共串长度小于3不输出。2、  若出现等长的最长的子串,则输出字典序最小的串。算法思路:按字符串的长度由短到长进行快排。枚举第一个字符串的不同长度子串,判断她是否为下面多有的公共子串?如果是的话,那么我们就表明找到,则比较其长度,如果比已经找到的串长,那么就替换结果串 否则按字典序比较。取字典序考前的,就可以。

2016-03-22 20:15:40 427

原创 HDU 3746 Cyclic Nacklace

题目大意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。例子:abcabc 已经循环2次,添加数为0abcac 没有循环2次,添加字符abcac。数目为5.abcabcab 已经循环过2次,但第三次不完整,需要添加数为1算法分析:利用kmp的next数组的性质,我们先得到next数组,字符串长度为len,如果next[len] == 0说明这个字符串没

2016-03-22 16:10:47 349

原创 hdu 1867 A + B for you again

题目大意:两个字符串合并成一个,串1的后缀和串2前缀相同部分只出现一次,不固定串1串2,要求合并后串长最小,如果有等串长的两种情况出现,取字典序小的。Sample Inputasdf sdfgasdf ghjk Sample Output asdfg asdfghjk

2016-03-22 15:06:31 500

原创 kmp模式匹配算法

#include #includeusing namespace std;void get_next(char*t, int next[ ]){//确定匹配失败的时候模式串返回的位置 int t_len=strlen(t); int i=0; //求解每个next[i] next[0]=-1; //递推基本条件,然后求解next[i+1] int j=-1;

2016-03-22 10:22:45 641

原创 组织集体活动

题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1081

2016-03-22 00:37:57 425

原创 链表实现栈

#include #include typedef int DataType; //自定义数据类型,假定为整型struct Node; //单链表结点类型typedef struct Node *PNode; //结点指针类型typedef struct Node /

2016-03-21 22:50:27 428

原创 约瑟夫环问题

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。/*用循环链表实现约瑟夫问题*/#include#includeusing namespace std;typedef struct LNode{

2016-03-21 21:56:10 1937

原创 链表实现栈

#include #include typedef int DataType; //自定义数据类型,假定为整型struct Node; //单链表结点类型typedef struct Node *PNode; //结点指针类型typedef struct Node /

2016-03-21 21:54:22 313

原创 链表实现队列

/***********************************************************/// 程序名称:StackOfLink.cpp// 程序目的:设计一个链表实现的队列的程序/***********************************************************/#include #include #define

2016-03-21 21:53:51 390

原创 单链表实现管理系统

/*建立一个结点包括职工的编号、年龄和性别的单向链表,分别定义函数完成以下功能:(1)遍历该链表输出全部职工信息;(2)分别统计出男女性职工的人数;(3)在链表尾部插入新职工结点;(4)删除指定编号的职工结点;(5)删除年龄在60岁以上的男性职工或55岁以上的女性职工结点,并保存在另一个链表中*/#includeusing namespace std;struct n

2016-03-21 21:39:45 2072

原创 链表合并

将两个有序链表合并成一个有序链表。#include #include using namespace std;//定义单链表的接点typedef struct Node{ int data; struct Node * next; }Nodes; //将两个单调递增链表合并成一个 单调递增链表void merge(Node * a,

2016-03-21 20:48:10 581

原创 双向链表的基本操作

双向链表的插入顺序:双向链表的删除顺序:#include #include typedef struct doubleLink { int data; struct doubleLink *pre; struct doubleLink *next; }dnode; //建立链表 dnode* create

2016-03-21 20:30:42 4356 1

原创 带头节点的单链表的基本操作

#include#includetypedef struct node{ int data; node* pNext;}Node;//链表的操作,以带有头节点单链表为例Node* head = NULL;//创建链表,头结点data=0,pNext=NULL;bool createNodeList(){ head = (Node*) malloc(sizeof(Node

2016-03-21 20:07:25 1019

原创 取余运算

题目:输入三个正整数a,p,k,求a(p)%k;算法分析:由于数据规模很大,如果直接计算,不仅需要采用高精度而且时间复杂度很大。已知模运算有如下规则:(a*b)%n=(a%n*b%n)%n         a(b)%n=((a%n)(b))%n,因此得到如下的递推公式:#includeusing namespace std;int mod(long long a, lo

2016-03-20 21:58:13 2695

原创 整数因子分解

#include int total;void solve(int n) { if (n==1) total++; else for (int i=2; i<=n; i++) if (n%i==0) solve(n/i);//对每一因子进行递归搜索}int main() { int n; while(scanf("%d",&n)!=EOF) { total = 0

2016-03-20 21:44:18 857

原创 寻找第k小的数字

算法分析:记一趟快速排序后,分解出左子集中元素个数为nleft(1)nleft=k-1,则分界数据就是答案(2)nleft>k-1,则选择问题的答案在左子集中寻找(3)nleft#include using namespace std;#define NUM 1001int a[NUM];//在a[left]~a[right]中寻找第k小的数 int select(int l

2016-03-20 21:16:43 1158

原创 棋盘覆盖问题

//棋盘覆盖问题/*(tr,tc)是棋盘左上角的方格坐标(dr,dc)是特殊方格所在的坐标size是棋盘的行数和列数 */ #includeusing namespace std;int board[1025][1025];static int tile = 1;void ChessBoard(int tr,int tc,int dr,int dc,int size){

2016-03-20 20:34:26 16844 13

原创 循环赛日程表

问题描述:     设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:        (1)每个选手必须与其他n-1个选手各赛一次;     (2)每个选手一天只能参赛一次;     (3)循环赛在n-1天内结束。     请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i

2016-03-20 00:13:18 7972

原创 整数的划分

整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:       n=m1+m2+...+mi; (其中mi为正整数,并且1        如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)       例如当n=4时,他有5个划分,{4},{3,1},{2,2},{2

2016-03-19 20:57:34 796

原创 全排列

#includeusing namespace std;void Arrangement(int list[],int k,int m){ if(k==m) { for(int i=0;i<=m;i++) { cout<<list[i]<<" "; } cout<<endl; } else { for(int j=k;j<=m;j++) { sw

2016-03-19 20:50:54 471

原创 zoj1107 fatmouse and cheese

算法分析:dp记忆化搜索+dfs#includeusing namespace std;int grad[100][100],result[100][100];int next[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int n,m;int Search(int x,int y){ int ty,tx; int maxs=0; //大于0说明搜索

2016-03-19 15:43:33 593

原创 zoj1074 to the max

求最大子矩阵和的时候,思路是取出两行i,j,,把这两行之间同一列的都加起来形成另外一个数组,求这个数组的最大子段和,求出来的这个和,就是这两行之间高度为i-j的子矩阵中最大的和.#include#includeusing namespace std;int n,a[100][100],c[100];//求解最大字段和 int maxsegment(){ int i; int s

2016-03-19 14:33:58 338

原创 数字三角形问题

计算从三角形的顶到底的一条路径,使得该路径经过的数字总和最大解题思路:自底向上逐层选择相加,动态规划状态转移方程: t[i][j]=t[i][j]+max(t[i+1][j],t[i+1][j+1]); i=n-2,n-3,n-4.......,0.       0

2016-03-19 10:36:57 1020

原创 最长单调递增子序列

#include#includechar array[10001];int MaxLen[10001];//最长递增子序列void LIS(){ memset(MaxLen,0,sizeof(MaxLen)); int len = strlen(array); for(int i = 0;i < len;i++){ MaxLen[i] = 1; for(int j = 0;

2016-03-18 22:24:01 536

原创 0-1背包问题

#include #define MAX_NUM 5#define MAX_WEIGHT 10using namespace std;//动态规划求解int zero_one_pack(int total_weight, int w[], int v[], int flag[], int n) { int c[MAX_NUM+1][MAX_WEIGHT+1] = {0}; //c[

2016-03-18 21:06:26 1041

原创 最大子段和

#includeusing namespace std;int main(){ int a[100],i,n; int b=0,sum=0; int begin,besti,bestj; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) { if(b>0) b+=a[i]; else { b

2016-03-18 21:06:02 776

空空如也

空空如也

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

TA关注的人

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