Algorithm & Data Structure
文章平均质量分 65
记录自己的算法学习之路和刷题集锦。
大风车滴呀滴溜溜地转
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
展开
-
源程序的相似性分析 —— 基于Python实现哈希表
一、问题描述对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,并最终按定量的计算结果,得出两份程序的相似性。二、需求分析建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度, 得到两个向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。例如: 关键字 Void Int For Char if else while do break class 程序1关键字频度 4 3原创 2020-11-29 14:22:24 · 1545 阅读 · 2 评论 -
第十一届蓝桥杯赛后总结 —— 两年征战蓝桥,惜败来年再战。
两年征战蓝桥,惜败来年再战。原创 2020-11-21 13:30:39 · 3419 阅读 · 4 评论 -
素数-欧拉筛-Python实现
返回小于n的所有素数def EulerSieve(n: int): filter, primers = [False for _ in range(n + 1)], [] for i in range(2, n + 1): if not filter[i]: primers.append(i) for prime in primers: if i * prime > n:原创 2020-11-05 12:08:02 · 2105 阅读 · 2 评论 -
进制转换
进制转换为什么要学习进制计算机只认识二进制,也就是0和1,为了更好学习计算机,首先就要深入理解什么是进制。当初最早的程序员都是靠二进制写程序的,就是一堆人敲键盘的0和1来写程序。后来过渡到十六进制,大家都在敲0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f来写程序。二进制使用起来很不方便, 16进制或8进制可以解决这个问题,因为,进制越大,数的表达长度也就越短。为什么偏偏...原创 2020-02-11 14:18:39 · 803 阅读 · 0 评论 -
1113:不与最大数相同的数字之和
题目限制时间限制: 1000 ms 内存限制: 65536 KB提交数: 9644 通过数: 4994【题目描述】输出一个整数数列中不与最大数相同的数字之和。【输入】输入分为两行:第一行为N(N为接下来数的个数,N ≤ 100);第二行N个整数,数与数之间以一个空格分开,每个整数的范围是-1000,000到1000,000。【输出】输出为N个数中除去最大...原创 2019-02-10 13:12:57 · 2901 阅读 · 1 评论 -
括号的匹配(表达式的合法性检查)
【问题描述】假设一个表达式由英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。假设表达式长度小于255,左圆括号少于20个。【算法分析】假设输入的字符串存储在c中(char c[256])。可以定义一个栈:char s[maxn+1];int top;...原创 2019-02-12 12:39:57 · 2058 阅读 · 1 评论 -
编程求一个后缀表达式的值
【问题描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(-)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。【算法分析】后缀表达式的处理过程很简单,过程如下:扫描后缀表达式,凡遇操作数则将之压进堆栈,与运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫...原创 2019-02-12 13:36:59 · 6187 阅读 · 0 评论 -
1031:反向输出一个三位数
时间限制: 1000 ms 内存限制: 65536 KB提交数: 18788 通过数: 11536【题目描述】将一个三位数反向输出,例如输入358,反向输出853。【输入】一个三位数n。【输出】反向输出n。【输入样例】100【输出样例】001【来源】No代码#include <cstdio>using namespace std;...原创 2019-02-27 19:09:56 · 2488 阅读 · 0 评论 -
1020:打印ASCII码
时间限制: 1000 ms 内存限制: 65536 KB提交数: 13488 通过数: 10678【题目描述】输入一个除空格以外的可见字符(保证在函数scanf中可使用格式说明符%c读入),输出其ASCII码。【输入】一个除空格以外的可见字符。【输出】一个十进制整数,即该字符的ASCII码。【输入样例】A【输出样例】65【来源】No代码#inc...原创 2019-02-23 23:10:04 · 793 阅读 · 0 评论 -
1000:入门测试题目
【题目描述】求两个整数的和。【输入】一行,两个用空格隔开的整数。【输出】两个整数的和。【输入样例】1 2【输出样例】3代码#include <iostream>using namespace std;int main (){ int a,b,c; cin>>a>>b; c=a+b; cout<<c;} ...原创 2019-02-18 23:23:28 · 842 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1038:苹果和虫子
时间限制: 1000 ms 内存限制: 65536 KB提交数: 27918 通过数: 7991【题目描述】你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?【输入】输入仅一行,包括n,x和y(均为整数)。【输出】输出也仅一行,剩下的苹果个数。...原创 2019-02-28 21:24:09 · 1693 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1041:奇偶数判断
时间限制: 1000 ms 内存限制: 65536 KB提交数: 16508 通过数: 12122【题目描述】给定一个整数,判断该数是奇数还是偶数。如果n是奇数,输出odd;如果n是偶数,输出even。【输入】输入仅一行,一个大于零的正整数n。【输出】输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。【输入样例】5【输出样例】odd【...原创 2019-02-28 21:26:48 · 1539 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1009:带余除法
【题目描述】给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。【输入】一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。【输出】一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。【输入样例】10 3【输出样例】3 1【来源】No代码#include <cstdio>using na...原创 2019-02-19 23:08:37 · 1112 阅读 · 0 评论 -
排序算法 —— 选择排序
基本思想每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列最前,直到全部待排序的数据元素排完。具体步骤1.读入数据存放在a数组中。2.在a[1]~a[n]中选择值最小的元素,与第1位置元素交换,则把最小值元素放入a[1]中。3.在a[2]~a[n]中选择值最小的元素,与第2位置元素交换,则把最小值元素放入a[2]中,……4.直到n-1个元素与第n个元素比较排序...原创 2019-03-02 12:37:47 · 391 阅读 · 0 评论 -
排序算法 —— 冒泡排序
基本思想n个元素,从第1个开始,依次比较相邻的两个是否逆序对(大在前,小在后),若逆序就交换两个元素,即第1个和第2个比,若逆序就交换两个元素,接着第2个和第3个比,若逆序就交换两个元素,接着第3个和第4个比,若逆序就交换两个元素,……,直到n-1和n比较,经过一轮比较后,则把最大的元素排到最后,即将最大的元素像冒泡一样逐步冒到相应的位置。原来n个元素的排序问题,转换为n-1个元素的排序问题。第...原创 2019-03-02 13:55:42 · 436 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1354:括弧匹配检验
时间限制: 1000 ms 内存限制: 65536 KB提交数: 5098 通过数: 1642【题目描述】假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?输入一个只包含圆括号...原创 2019-03-07 17:59:49 · 1592 阅读 · 0 评论 -
排序算法 —— 插入排序
基本思想当读入一个元素时,在已经排序好的序列中,搜寻它正确的位置,再放入读入的元素。但不该忽略一个重要的问题:在插入这个元素前,应当先将它后面的所有元素后移一位,以保证插入位置的原元素不被覆盖。具体步骤插入排序使用的是增量(incremental)方法;在排好子数组A[1…j-1]后,将A[j]插入,形成排好序的子数组A[1…j];步骤:⒈从有序数列和无序数列{a2,a3,…,an}开始...原创 2019-03-02 21:42:19 · 343 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1045:收集瓶盖赢大奖
#include &lt;stdio.h&gt;int main (){ int a,b; scanf("%d %d",&amp;a,&amp;b); if(a&gt;10||b&gt;20) { printf("1"); } else { printf("0"); } ret原创 2019-03-02 23:59:16 · 2106 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1114:白细胞计数
时间限制: 1000 ms 内存限制: 65536 KB提交数: 12460 通过数: 4172【题目描述】医院采样了某临床病例治疗期间的白细胞数量样本n份,用于分析某种新抗生素对该病例的治疗效果。为了降低分析误差,要先从这n份样本中去除一个数值最大的样本和一个数值最小的样本,然后将剩余n-2个有效样本的平均值作为分析指标。同时,为了观察该抗生素的疗效是否稳定,还...原创 2019-02-26 20:05:33 · 1692 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1050:骑车与走路
时间限制: 1000 ms 内存限制: 65536 KB提交数: 16034 通过数: 9287【题目描述】在清华校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。...原创 2019-03-03 09:10:42 · 2933 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1051:分段函数
时间限制: 1000 ms 内存限制: 65536 KB提交数: 12615 通过数: 7367【题目描述】编写程序,计算下列分段函数y=f(x)的值。结果保留到小数点后三位。y=-x+2.5; 0≤x<5y=2-1.5(x-3)(x-3); 5≤x<10y=x2-1.5; 10≤x<20【输入】一个浮点数N(0≤N<20)【输出】...原创 2019-03-03 09:11:47 · 1296 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1053:最大数输出
时间限制: 1000 ms 内存限制: 65536 KB提交数: 11657 通过数: 8229【题目描述】输入三个整数,数与数之间以一个空格分开。 输出一个整数,即最大的整数。【输入】输入为一行,包含三个整数,数与数之间以一个空格分开。【输出】输出一行,包含一个整数,即最大的整数。【输入样例】10 20 56【输出样例】56【来源】NO代码#...原创 2019-03-03 09:15:22 · 1063 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1054:三角形判断
时间限制: 1000 ms 内存限制: 65536 KB提交数: 13665 通过数: 7848【题目描述】给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。如果能构成三角形,则输出“yes”,否则输出“no”。【输入】输入共一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一个空格分开。【输出】如果能构成三角形,则输出“yes...原创 2019-03-03 09:16:22 · 1381 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1055:判断闰年
时间限制: 1000 ms 内存限制: 65536 KB提交数: 18402 通过数: 8342【题目描述】判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。【输入】输入只有一行,包含一个整数a(0 < a < 3000)。【输出】一行,如果公元a年是闰年输出Y,否则输出N。【输入样例】2006【输出样例】N【来源】NO代码...转载 2019-03-03 09:17:33 · 1155 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1056:点和正方形的关系
时间限制: 1000 ms 内存限制: 65536 KB提交数: 9150 通过数: 6365【题目描述】有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。如果点在正方形内,则输出yes,否则输出no。【输入】输入一行,包括两个整...原创 2019-03-04 09:13:27 · 1110 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1312:【例3.4】昆虫繁殖
时间限制: 1000 ms 内存限制: 65536 KB提交数: 5602 通过数: 2671【题目描述】科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,...原创 2019-03-08 15:10:16 · 954 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1313:【例3.5】位数问题
时间限制: 1000 ms 内存限制: 65536 KB提交数: 4005 通过数: 2088【题目描述】在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。【输入】读入一个数N(N≤1000)。【输出】输出有多少个数中有偶数个数字3。【输入样例】2【输出样例】73【来源】No代码#incl...原创 2019-03-08 15:41:31 · 2146 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1064:奥运奖牌计数
时间限制: 1000 ms 内存限制: 65536 KB提交数: 12538 通过数: 8833【题目描述】2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。输入第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目。输出4个整数,为A国所获得的金、银、铜牌...原创 2019-03-08 22:58:28 · 2961 阅读 · 4 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1065:奇数求和
时间限制: 1000 ms 内存限制: 65536 KB提交数: 13673 通过数: 9125【题目描述】计算非负整数m到n(包括m和n)之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35。【输入】两个数 m 和 n,两个数以一个空格分开,其中 0 ≤ m ≤ n ≤ 300 。【输出...原创 2019-03-08 22:59:33 · 2400 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1066:满足条件的数累加
时间限制: 1000 ms 内存限制: 65536 KB提交数: 10060 通过数: 8436【题目描述】将正整数m和n之间(包括m和n)能被17整除的数累加,其中0&lt;m&lt;n&lt;1000。【输入】一行,包含两个整数m和n,其间,以一个空格间隔。【输出】输出一行,包行一个整数,表示累加的结果。【输入样例】50 85【输出样例】204【...原创 2019-03-09 17:53:29 · 1799 阅读 · 1 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1056:点和正方形的关系
时间限制: 1000 ms 内存限制: 65536 KB提交数: 9150 通过数: 6365【题目描述】有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。如果点在正方形内,则输出yes,否则输出no。【输入】输入一行,包括两个整...原创 2019-03-04 09:15:15 · 898 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1057:简单计算器
时间限制: 1000 ms 内存限制: 65536 KB提交数: 17863 通过数: 7164【题目描述】一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而:如果出现除数为0的情况,则输出:Divided by zero!如果出现无效的操作符(即不为 +, -, *, / 之一),...转载 2019-03-04 09:15:58 · 5413 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1058:求一元二次方程
时间限制: 1000 ms 内存限制: 65536 KB提交数: 24853 通过数: 3925【题目描述】利用公式,求一元二次方程ax2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。【输入】输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax2+bx+c=0的系数。【输出】输出一行,表示方程的解。若两个实根相等,...原创 2019-03-04 09:15:24 · 3541 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1059:求平均年龄
时间限制: 1000 ms 内存限制: 65536 KB提交数: 22146 通过数: 11998【题目描述】班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。【输入】第一行有一个整数n(1≤ n ≤ 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。【输出】输出一行,该行包含一个...原创 2019-03-04 09:15:34 · 1954 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1060:均值
时间限制: 1000 ms 内存限制: 65536 KB提交数: 16274 通过数: 9781【题目描述】给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。【输入】输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。【输出】输出一行,包含一个浮点数,表示均值,精确到小数...原创 2019-03-04 09:15:43 · 25066 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1061:求整数的和与均值
时间限制: 1000 ms 内存限制: 65536 KB提交数: 19141 通过数: 9313【题目描述】读入n(1≤n≤10000)个整数,求它们的和与均值。【输入】输入第一行是一个整数n,表示有n个整数。第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。【输出】输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格...原创 2019-03-04 09:15:50 · 1442 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1062:最高的分数
时间限制: 1000 ms 内存限制: 65536 KB提交数: 13030 通过数: 9960【题目描述】孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?【输入】输入两行,第一行为整数n(1 ≤ n &lt; 100),表示参加这次考试的人数.第二行...原创 2019-03-04 09:16:06 · 2554 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1339:【例3-4】求后序遍历
时间限制: 1000 ms 内存限制: 65536 KB提交数: 1380 通过数: 940【题目描述】输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。【输入】共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。【输出】一行,表示树的后序遍历序列。【输入样例】abdecdbeac【输出样例...原创 2019-03-04 09:12:50 · 1158 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1063:最大跨度值
时间限制: 1000 ms 内存限制: 65536 KB提交数: 14878 通过数: 9381【题目描述】给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。【输入】一共2行,第一行为序列的个数n(1 ≤ n ≤ 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。【输出】输出一行,表示序列...原创 2019-03-05 08:12:20 · 5350 阅读 · 0 评论 -
信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1363:小球(drop)
时间限制: 1000 ms 内存限制: 65536 KB提交数: 1711 通过数: 924【题目描述】许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节...原创 2019-03-05 10:00:21 · 1617 阅读 · 0 评论