自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Alex_McAvoy的博客

想要成为渔夫的猎手

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

原创 ACM 常用算法合集

【基础算法】模拟算法:点击这里 数据排序:点击这里 高精度计算:点击这里 递推算法:点击这里 递归算法:点击这里 贪心算法:点击这里 分治法:点击这里 二分查找:点击这里 三分查找:点击这里 尺取法:点击这里【进阶算法】数据搜索:点击这里 字符串处理:点击这里 动态规划:点击这里 数据结构相关:点击这里 图论算法:点击这里【数学相关】数论:点击这里 组合...

2018-04-12 20:31:16 9203 5

原创 理论基础 —— 查找 —— 斐波那契查找

【概述】斐波那契查找,其利用了黄金分割原理来对二分查找进行了改进。黄金分割又称黄金比例,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为 1:0.618 或 1.618:1,黄金比例不仅在绘画、艺术上有着重要的审美价值,在工程上也具有极大的作用。在二分查找中,每次查找都是将查找表一分为二,无论数据是偏大还是偏小,很多时候都未...

2018-04-29 15:14:33 694

原创 理论基础 —— 查找 —— 插值查找

【概述】以查字典为例,在英文字典中查 "apple" 时,下意识的会翻开前面的书页,当查 "zoo" 时,下意识的翻开一定是后面的书页,显然,此时还绝对不是从中间开始查起,而且有一定目的地从前或从后查找。同样的,以取值范围在 1~10000 间的 100 个元素从小到大均匀分布的数组中查找 5,那么自然会考虑从数组下标较小的开始查找。可以看出,二分查找这种查找方式,并不是自适应的,因此...

2018-04-29 15:03:00 1231

原创 理论基础 —— 索引 —— 分块索引

【概述】分块索引既适用于静态索引,又适用于动态索引。在稠密索引中,索引项的个数与文件记录个数相同,空间代价很大,为减少索引项的个数,可以对文件分块,使分块有序。分块有序,是指数据集的记录分为若干块,并且这些块满足两个条件:块间有序:后一块的所有记录的关键字要大于前一块的所有记录的关键字 块内无序:每一块的记录不要求有序在分块索引表中进行的查找称为分块查找,其分两步进行:在索...

2018-04-29 14:45:30 1178

原创 理论基础 —— 查找 —— 顺序查找

【概述】顺序查找是最基本的查找技术之一,其基本思想是:从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值 k 相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k 的结点,表示查找失败。【复杂度分析】对于 n 个记录的顺序表,查找第 i 个记录时,需要进行 n-i+1 次关键码的比较。在查找成功时,有:设每个记录的查找概率相等,则有:故:...

2018-04-29 14:33:07 526

原创 分治 —— 简单分治

【概述】分治法,即将较大规模的问题分解成几个较小规模的问题,通过对较小问题的求解来达到对整个问题的求解。简单分治,一般是利用分治的思想,将问题缩小规模进行递归或模拟来解决。【例题】南蛮图腾(洛谷-P1498)(分治递归):点击这里 循环比赛日程表(信息学奥赛一本通-T1325)(循环分治):点击这里 区间合并(信息学奥赛一本通-T1236)(区间判断):点击这里 取余运算(信...

2018-04-28 20:44:30 1132

原创 基础算法 —— 递归算法

【概述】递归算法:一种通过重复将问题分解为同类的子问题而解决问题的方法。 适用问题:解决结构自相似的问题。即:构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。 特点:反复执行、结束反复执行的条件 缺点:占用大量内存且不易阅读【两个问题】递归边界条件(递归终止条件):确定递归到何时终止,或者说,直接有解的情况。 递归模式(递归体):大问题是如何分解为小问题的。注:...

2018-04-28 00:38:51 1861

原创 Pell数列(信息学奥赛一本通-T1189)

【题目描述】Pell数列a1,a2,a3,...的定义是这样的,a1=1,a2=2,...,an=2an−1+an−2(n>2).给出一个正整数k,要求Pell数列的第k项模上32767是多少。【输入】第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1≤k<1000000)。【输出】n行,每行输出对应一个输入。输出应是一个非...

2018-04-25 20:56:14 6537

原创 菲波那契数列(信息学奥赛一本通-T1188)

【题目描述】菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。【输入】第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 ≤ a ≤ 1000000)。【输出】n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中...

2018-04-25 20:55:07 8469

原创 过河卒(信息学奥赛一本通-T1314)

【题目描述】棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B。现在要求你计算出...

2018-04-25 20:53:00 5725 3

原创 位数问题(信息学奥赛一本通-T1313)

【题目描述】在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。【输入】输入包含一行,一个字符串,长度不超过1000。读入一个数N。【输出】输出有多少个数中有偶数个数字3。【输入样例】2【输出样例】73【源程序】#include<iostream>#include<cstdi...

2018-04-25 20:51:58 6904 4

原创 昆虫繁殖(信息学奥赛一本通-T1312)

【题目描述】科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50。【输入】x,y,z的数值。【输出】过Z个月以后,共有成虫对数。【输入样例】1 2...

2018-04-25 20:50:19 9060 9

转载 数学 —— 计算几何 —— 平面分割问题

【直线分平面问题】问题:n条直线,最多可以把平面分为多少个区域。解:当有n-1条直线时,平面最多被分成了f(n-1)个区域。则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点。 这样就会得到n-1个交点。这些交点将第n条直线分为2条射线和n-2条线段。而每条射线和线段将以有的区域一分为二。这样就多出了2+(n-2)个区域。如图:第四条红色的线与其他3条线生成了3...

2018-04-25 19:51:57 2442 1

原创 组合数学 —— 斯特林数(Stirling)

【第一类斯特林数】1.定理第一类斯特林数 S1(n,m) 表示的是将 n 个不同元素构成 m 个圆排列的数目。2.递推式设人被标上1,2,.....p,则将这 p 个人排成 m个圆有两种情况:在一个圆圈里只有标号为 p 的人自己,排法有 S1(n-1,m-1) 个。 p 至少和另一个人在一个圆圈里。这些排法通过把 1,2....n-1 排成 m 个圆再把 n 放在 1,2...

2018-04-25 19:02:00 20737 6

原创 组合数学 —— 卡特兰数列(Catalan)

【概述】卡特兰数列是组合数学中一个常出现在各种计数问题中出现的数列,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, ......卡特兰数首先是由欧拉在计算对凸 n 边形的不同的对角三角形剖分的个数问题时得到的,即在一个凸 n 边形中,通过不相交于 n 边形内部的对角线,把 n 边形拆分成若干三角...

2018-04-24 22:42:58 3369

原创 基础算法 —— 递归/递推 —— 汉诺塔问题(Hanoi)

【问题提出】Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图所示。要求把a柱上n个圆盘按下述规则移到c柱上:  (1)一次只能移一个圆盘;  (2)圆盘只能在三个柱上存放;  (3)在移动过程中,不允许大盘压小盘。问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?【问题解答】解:设Hn为n个盘子...

2018-04-23 22:00:16 4460

原创 数论 —— 斐波那契数列(Fibonacci)

【概述】斐波那契数列(Fibonacci sequence),又称黄金分割数列,其指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368....这个数列从第 3 项开始,每一项都等于前两项之和。斐波那契数列除应用递推、递归...

2018-04-23 21:44:02 2854

原创 基础算法 —— 递推算法

【概述】递推算法:通过已知条件,利用相邻的数据项间的关系(即:递推关系),得出中间推论,直至得到结果的算法。 递推关系:给定一个数的序列H0,H1,…,Hn,若存在整数N0,使当n>N0时,可以用=/>/<将Hn与其前面的某些项Hi(0<i<n)联系起来。 特点:避开了求通项公式的麻烦,把一个复杂问题的求解,分解成了连续的若干简单运算。 基本思想:把一个复杂...

2018-04-23 20:48:32 2755 1

原创 统计字符数(信息学奥赛一本通-T1187)

【题目描述】给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。【输入】输入包含一行,一个字符串,长度不超过1000。【输出】输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。【输入样例】abbccc【输出样例】c 3【源程序】#i...

2018-04-22 21:36:19 6595 2

原创 出现次数超过一半的数(信息学奥赛一本通-T1186)

【题目描述】给出一个含有n(0 < n ≤ 1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。【输入】第一行包含一个整数n,表示数组大小;第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。【输出】如果存在这样的数,输出这个数;否则输出no。【输入样例】31 2 2【输出样例】2【...

2018-04-22 21:35:12 9941 6

原创 单词排序(信息学奥赛一本通-T1185)

【题目描述】输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)【输入】一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。【输出】按字典序输出这些单词,重复的单词只输出一次。【输入样例】She wants to go ...

2018-04-22 21:33:54 9942 5

原创 明明的随机数(信息学奥赛一本通-T1184)

【题目描述】明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。【输入】有2行,第1行为1个正整数,表示所生成的随机数的个数:N...

2018-04-22 21:32:52 7741 3

原创 病人排队(信息学奥赛一本通-T1183)

【题目描述】病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:1.老年人(年龄 >= 60岁)比非老年人优先看病。2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。3.非老年人按登记的先后顺序看病。【输入】第1行,输入一个小于100的正整数,表示病人的个数;后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度...

2018-04-22 21:31:22 9372 2

原创 分数线划定(信息学奥赛一本通-T1180)

【题目描述】世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150150划定,即如果计划录取mm名志愿者,则面试分数线为排名第m×150m×150(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。现在就请你编写程序划定面试分数线...

2018-04-21 14:48:25 6740 1

原创 整数奇偶排序(信息学奥赛一本通-T1181)

【题目描述】给定10个整数的序列,要求对其重新排序。排序要求:奇数在前,偶数在后; 奇数按从大到小排序; 偶数按从小到大排序。【输入】输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100。【输出】按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。【输入样例】4 7 3 13 11 12 0 47 34 ...

2018-04-21 14:46:52 7399 3

原创 合影效果(信息学奥赛一本通-T1182)

【题目描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?【输入】第一行是人数n(2 ≤ n ≤ 40,且至少有1个男生和1个女生)。后面紧跟n行,每行输入一个人的性别(男male或女female)...

2018-04-21 14:45:40 7610 2

原创 奖学金(信息学奥赛一本通-T1179)

【题目描述】某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前...

2018-04-21 14:44:03 8156

原创 成绩排序(信息学奥赛一本通-T1178)

【题目描述】给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。【输入】第一行为n (0 < n < 20),表示班里的学生数目;接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。【输出】把成绩单按分数从高到低的顺序进行排序并输出,...

2018-04-21 14:41:20 12335 1

原创 奇数单增序列(信息学奥赛一本通-T1177)

【题目描述】给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。【输入】第1行为 N;第2行为 N 个正整数,其间用空格间隔。【输出】增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。【输入样例】101 3 2 6 5 4 9 8 7 10【输出样例】1,3,5,7,9【源程序】#include&lt...

2018-04-21 14:39:47 8207

原创 谁考了第k名(信息学奥赛一本通-T1176)

【题目描述】在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。【输入】其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。【输出】输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)【输入样例】5 390788001 67.890788002 90.390788003 6...

2018-04-21 14:33:36 13303

原创 求逆序对(信息学奥赛一本通-T1311)

【题目描述】给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目。【输入】第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数。【输出】所有逆序对总数。【输入样例】43232【输出样例】3【源程序】#include<iostream>#include...

2018-04-21 14:32:11 9348 2

原创 车厢重组(信息学奥赛一本通-T1310)

【题目描述】在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。【...

2018-04-21 14:30:40 7321 4

原创 理论基础 —— 排序 —— 逆序对问题

【概述】设A为一个有n个数字的有序集,其中所有数字各不相同。如果存在整数i、j,使得1<=i<j<=n且A[i]>A[j],则{A[i],A[j]}这个有序对称为A的一个逆序对。例如:集合{3,1,4,5,2}的逆序对有{3,1}、{3,2}、{4,2}、{5,2}共4个。而逆序对问题,即:对给定的数组序列,求其逆序对的数量。【分析】从定义上分析,逆序对...

2018-04-20 13:17:26 1532

原创 中缀表达式值(信息学奥赛一本通-T1358)

【题目描述】输入一个中缀表达式(由0-9组成的运算数、加+减—乘*除/四种运算符、左右小括号组成。注意“—”也可作为负数的标志,表达式以“@”作为结束符),判断表达式是否合法,如果不合法,请输出“NO”;否则请把表达式转换成后缀形式,再求出后缀表达式的值并输出。注意:必须用栈操作,不能直接输出表达式的值。【输入】一行为一个以@结束的字符串。【输出】如果表达式不合法,请输出“...

2018-04-19 22:51:29 6196

原创 车厢调度(信息学奥赛一本通-T1357)

【题目描述】有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合。假设从A方向驶来的火车有n节(n≤1000),分别按照顺序编号为1,2,3,…,n。假定在进入车站前,每节车厢之间都不是连着的,并且它们可以自行移动到B处的铁轨上。另外假定车站C可以停放任意多节车厢。但是一旦进入车站C,它就不能再回到A方向的铁轨上了,并且一旦当它进入B方向的铁轨,它就不能再回...

2018-04-19 22:42:35 6049

原创 计算(信息学奥赛一本通-T1356)

【题目描述】小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)【输入】共1行,为一个算式。【输出】共1行,就是密码。【输入样例】1+(3+2)*(7^2+6*9)/(2)...

2018-04-19 22:38:55 7376 1

原创 字符串匹配问题(信息学奥赛一本通-T1355)

【题目描述】字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]),([)]都应该输出NO。【输入】第一行为一个整数n,表示以下有多少个由括好组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。...

2018-04-19 22:36:44 7581

原创 括弧匹配检验(信息学奥赛一本通-T1354)

【题目描述】假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如 ([]()) 或 [([][])] 等为正确的匹配,[(]) 或([]() 或 (()) 均为错误的匹配。现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。输入一个字符串:[([][]...

2018-04-19 22:35:13 6263

原创 表达式括号匹配(信息学奥赛一本通-T1353)

【题目描述】假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。【输入】一行数据,即表达式。【输出】一行,即“YES” 或“NO”。【输入样例】2*(x+y)/(1-x)@【...

2018-04-19 22:33:44 3598 3

原创 后缀表达式的值(信息学奥赛一本通-T1331)

【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:栈中的变化情况:运行结果:-47提示:输入字符串长度小于250,参与运算的整数及结果之...

2018-04-19 22:31:02 7164

空空如也

空空如也

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

TA关注的人

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