冲刺NOIP之整理
NOIP初赛复习(提高组)-精华版

分区联赛初赛复习材料初赛考的知识点就是计算机基本常识、基本操作和程序设计基础知识。
其中选择题考查的是知识,而问题解决类型的题目更加重视能力的考查。
一般说来,选择题只要多用心积累就可以了。
问题解决题目的模式比较固定,大家应当做做以前的题目。
写运行结果和程序填空也需要多做题目,并且培养良好的程序阅读和分析能力,就像语文的阅读理解一样。
近几年来,初赛的考查范围有了很大的变化,越来越紧跟潮流了。
这就需要大家有比较广泛的知识,包括计算机硬件、软件、网络、简单的数据结构(例如栈、队列、树和图等)和简单的算法(例如排序、查找和搜索等),程序设计语言以及一些基本的数学知识和技巧(例如排列组合)。
但最主要的,还是取决于你对程序设计语言的熟悉程度,再加上认真仔细的心态。
选择题、硬件计算机发展可划分:1946年2月,在美国宾夕法尼亚大学诞生了世界上第一台电子计算机ENIA Q Electronic Numerical Integrator And Computer),这台计算机占地170 平方米,重30 吨,用了18000 多个电子管,每秒能进行5000次加法运算。
冯•诺依曼理论1944年,美籍匈牙利数学家冯•诺依曼提出计算机基本结构和工作方式的设想,为计算机的诞生和发展提供了理论基础。
时至今日,尽管计算机软硬件技术飞速发展,但计算机本身的体系结构并没有明显的突破,当今的计算机仍属于冯•诺依曼架构。
其理论要点如下:1、计算机硬件设备由存储器、运算器、控制器、输入设备和输出设备5部分组成。
2、存储程序思想一一把计算过程描述为由许多命令按一定顺序组成的程序,然后把程序和数据一起输入计算机,计算机对已存入的程序和数据处理后,输出结果。
微型机的主要技术指标1、字长:知己算计能够直接处理的二进制数据的位数。
单位为位(BIT)2、主频:指计算机主时钟在一秒钟内发岀的脉冲数,在很大程度上决定了计算机的运算速度。
3、内存容量:是标志计算机处理信息能力强弱的一向技术指标。
NOIP知识点汇总

NOIP知识点汇总加*号是选学,加粗为重点,重要值排序不分先后基础贪⼼、枚举、分治、⼆分、倍增、*构造、⾼精、模拟图论图最短路(dijkstra、spfa、floyd),差分约束最⼩⽣成树(kruskal、prim)并查集(扩展域)拓扑排序⼆分图染⾊,*⼆分图匹配tarjan找scc、桥、割点,缩点*分数规划树树上倍增(LCA)树的直径、树的重⼼dfs序*树链剖分数论gcd、lcm埃⽒筛法exgcd,求解同余⽅程、逆元快速幂*组合数学矩阵链表、队列(单调队列)、栈(单调栈)堆、st表、hash表线段树、树状数组字典树*分块动态规划背包DP、树形DP、记忆化搜索、递推区间DP、序列DP*DP优化(不涉及斜率优化、四边形不等式等等)搜索暴搜(dfs、bfs)搜索的剪枝启发式搜索(A*)迭代加深搜索、* IDA**随机化搜索其他算法STL的基本使⽤⽅法脑洞的正确使⽤⽅法*KMP*状态压缩冲省选的,先把整理的NOIP知识点学扎实,注意⼀定要学扎实加粗是重点,星号是选学学⽆⽌境,欢迎⼤家继续补充~图论⽹络流(dinic,SAP,ISAP选⼀个,费⽤流写EK就⾏。
*zkw费⽤流),⼆分图点分治,边分治,*动态点分治树链剖分,动态树,树分块虚树,*prufer编码*仙⼈掌算法带权并查集Splay(作为平衡树和维护区间),Treap,替罪⽺树线段树(权值线段树),树状数组,*线段树合并分块,块状链表,*双向链表凸包树套树主席树,可持久化trie,*其它可持久化数据结构莫队算法,*树上莫队,CDQ分治,整体⼆分⼆维线段树,*KDtree*舞蹈链,*⼆进制分组,*左偏树,*超哥线段树,*后缀平衡树,*fhqTreap 字符串相关及数据结构hash(⾃然溢出,双hash)kmp,AC⾃动机,trie后缀数组manacher,最⼩表⽰法*后缀⾃动机,*回⽂⾃动机,*后缀树数学线性筛,积性函数,容斥原理,莫⽐乌斯反演exgcd,费马⼩定理,Lucas定理,⾼中排列组合⾼斯消元,概率与期望相关中国剩余定理,BSGS,欧拉定理矩阵乘法单纯形法解线性规划FFT线性代数(⾏列式)*Simpson积分,⾼中求导与积分*群论*⽣成函数,多项式类算法博弈论相关,*密码学,阶,原根计算⼏何向量的点积/叉积,计算⼏何基础*⼆维计算⼏何相关,*三维计算⼏何相关*半平⾯交,*旋转卡壳,*三⾓剖分搜索A*,记忆化搜索,迭代深搜,双向⼴搜模拟退⽕,爬⼭算法,*随机增量法动态规划基础DP,树形DP,数位DP,状压DP,期望DP,基环树DP,*插头DP斜率优化,矩乘优化,单调队列优化,倍增优化,*四边形不等式优化trie图DP,*仙⼈掌DP其他算法构造,乱搞,随机化,三分法,打表,启发式合并Huffman树,2-sat,*朱刘算法说真的,计算⼏何要么全场不会,要么全场AK。
信息学奥赛NOIP初赛复习知识点

信息学奥赛NOIP初赛复习知识点1、计算机相关科学家:A:被西方人誉为“计算机之父”的美籍匈牙利科学家、数学家冯·诺依曼于1945 年发表了一个全新的" 存储程序通用电子计算机方案"—EDVAC。
EDVAC 方案提出了著名的“ 冯·诺依曼体系结构”理论:(1)采用二进制形式表示数据和指令(2)采用存储程序方式(3)由运算器、存储器、控制器、输入设备和输出设备五大部件组成计算机系统B:“图灵机”与“冯·诺伊曼机”齐名,被永远载入计算机的发展史中。
1950年10月,图灵又发表了另一篇题为“机器能思考吗”的论文,成为划时代之作。
也正是这篇文章,为图灵赢得了“人工智能之父”的桂冠。
与计算机有关的最高奖项“图灵奖”。
2、与竞赛有关的知识:A:信息学奥赛相关的软件有:anjuta 1.2.2版; Red Hat 9.0 自带了gcc/g++ 3.2.2版;Lazarus 0.9.10版;free pascal编译器2.0.1版; gdb 6.3版;RHIDE;(turbo pascal淘汰)3、与计算机系统相关的知识:A:常见的操作系统有:DOS、WIN32、WIN95、WIN98、WIN2000、WINXP、WIN2003、WIN2007、LINUX、VISTA4、与计算机软件相关的知识:无5、与计算机硬件相关的知识:A:断电后能保存信息的有:ROM(只读存储器)、硬盘、软盘、光盘、U盘、MP3、MP4等;不能保存的主要是RAM(读写存储器)。
B:CPU又名中央处理器,它可以拆分成运算器、控制器6、病毒及防火墙:A:防火墙的作用是防止黑客攻击。
7、与编程语言相关的知识:A:1972年PARC发布了Smalltalk的第一个版本。
大约在此时,“面向对象”这一术语正式确定。
Smalltalk被认为是第一个真正面向对象的语言B:第一代语言:机器语言(0101001);第二代语言:20世纪50年代,汇编语言,第三代语言:高级语言、算法语言,如BASIC,FORTRAN,COBOL,PASCAL,C;高级语言的特点是可读性强,编程方便;第四代语言:非过程化语言;SQL;第五代语言:智能性语言,PROLOG(代表);还有:LISP,APL,SNOBOL,SIMULA。
NOIP如何取得好成绩

重要的算法:
NOIP的基本难度分布是这样的: 6.二分答案
二分答案在实质上是一种枚举的优化, 一般采用迭代的写法, 但是有的时候也用递归,因为要递归的层数一般很少。 二分答案一般适用于当所要求的答案递增时可用, 时间复杂度一般来说都是O(log2n)。
重要的算法:
NOIP的基本难度分布是这样的:
【NOIP省选知识点汇总】
三、数学
考前的时间安排
2、十一月份复赛 如果可以的话,应该有两周的时间停课,专
心来准备NOIP的复赛,争取取得NOIP一等奖,
两周的时间一般对接下来的高考或期末的学 习成绩影响很小。(有许多同学甚至一个月不参 加文化课的学习,也不影响文化课成绩)
注:当然是否停课要看个人的情况而定哟!NOIP一等奖一般 是指提高组的一等奖。
2、 递推与递归,贪心法,二分法
3、 搜索算法(剪枝)
4、 动态规划(线性动态规划、、背包问题)
NOIP学习进阶
第四阶段:再次狂做题巩固第三阶段的内容,基本上都 是自主研究和学习,力争把这20年来全国赛,分区赛的 所有题目全部做一次,背熟了!!!
第五阶段:学习高级数据结构和算法,进一步提升,用 ACM的题目来练手。《信息学奥赛一本通提高版》 ---提高组(高中组)
7.计数 计数这一技巧可以在数据的规模较小, 而对时间复杂度的要求很低时可用, 基于计数排序或者哈希表的原理, 这个技巧可以在近似O(1)的时间内找到数据。
重要的算法:
NOIP的基本难度分布是这样的:
8.数论 NOIP并不考太过难的题目, 比如欧拉函数φ(n)之类的东西, 一般来说只会考与质数相关的基本数论, 并不会太难,就算是指数筛选也鲜有用O(n)算法的, 质数判定之类的问题更是一个O(sqrt(n))的算法就能搞定, 一般都出在第一到二题,或者说也就是一些非主要考点罢了。
NOIP初赛知识点复习总结

进制转换
1.二进制与十进制间的相互转换: (1)二进制转十进制 方法:“按权展开求和” 例:
(1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10 =(8+0+2+1+0+0.25)10 =(11.25)10 规律:个位上的数字的次数是0,十位上的数字的次数是 1,......,依次递增,而十 分位的数字的次数是-1,百分位上数字的次数是2,......,依次递减。 注意:不是任何一个十进制小数都能转换成有限位的二进 制数。
公式不用死记,用物理的量纲理论就可以了。由 单位确定公式。 (bit/s) * (s) = bit 下载速率*时间 = 文件大小
储存单位的计算
例题:一个音乐爱好者收藏有100首MP3 格式的音乐,这些音乐的编码率都是 192Kbps,平均每首音乐的时长为3min, 他要通过网络将这些音乐传送给另一个 人,假设网络速度恒定为512KB/s,则他 传送这些音乐大概需要( )。 A. 72s B. 843s C. 112.5min D. 3h48min16s E. 超过24小时
切记:2^5不是25而是2异或5
位运算
补充:负数在计算机内的表示是取对应正 数的补码。 补码 = 反码 + 1
如1表示为(0001)2,那么-1就表示为: (1111)2。 10表示为(1010)2,那么-10就表示为 (0110)2。
位运算
比如,计算21^2 先转换为二进制 21 = (10101)2 2 = (10)2
集合论
设全集I = {a, b, c, d, e, f, g},集合A = {a, b, c},B = {b, d, e},C = {e, f, g},那么集 合(A — B)∪(~C∩B)为( A)。 A. {a, b, c, d} B. {a, b, d, e} C. {b, d, e} D. {b, c, d, e} E. {d, f, g}
NOIP初赛相关知识点及参考答案

相关知识点与参考答案一.单项选择题1、操作系统是系统软件的核心,是有效利用计算机的硬件、软件、数据等各种资源的好管家,它还向用户提供一套容易学习使用的操作命令。
常用的操作系统有:MS-DOS、PC-DOS、WINDOWS、UNIX、LINUX、OS/2等。
WORD、WPS是字处理软件,FOXBASE是数据库管理软件。
2、字长表示一个存储单元由多少位二进制数组成,八位机一个字长就是一个字节,十六位机一个字长可以表示两个字节。
字长位的多少,表明可访问存储器的地址多少。
3、操作系统一般存放在系统盘,计算机启动引导系统后,系统中的常用命令就驻留在内存中,方便用户使用计算机。
所以启动计算机引导系统就是把操作系统从系统盘中调入内存储器。
4、我们要清楚,快存实质是高速缓存,主存即内存,辅存也就是外存。
在这三种存储器中,以高速缓存最快,故此,通常常用的程序都是存放在高速缓存区里。
而主存的速度当然是比辅存要快了。
5、一般,对计算机工作有较大影响的有尘土、温度、湿度。
6、计算机的指令系统是由操作码与操作数组成。
7、通用寄存器的位数跟机器有关,取决于计算机的字长。
8、计算机能实现的全部指令的集合合称为指令系统。
执行各条指令所规定的操作是由指挥工作的控制器和执行运算的部件共同完成。
而控制器与运算器合起来称为CPU。
9、RAM(random access memory)随时读写存储器,供计算机工作时随机写入,计算机一旦断电后,其中的信息就会消失。
10、WINDOWS 9X是一种多任务的可视化的操作系统,它可以同时打开多个窗口,执行多个任务,而这些操作无论是应用程序还是文档编辑窗口,都可以利用图标、菜单或工具进行操作,即所见即所得。
所以称之为多任务图形方式的操作系统。
1-10参考答案:BBDCBBCABD11、常用的操作系统有:MS-DOS、PC-DOS、WINDOWS、UNIX、LINUX、OS/2等。
PASCAL是程序设计的语言系统软件。
NOIP考前知识大总结

NOIP考前知识大总结第一篇:NOIP考前知识大总结数据类型TypeByteShortintSmallintWordIntegerCardinalLongintLongwordInt64QWordRealSingleDoubleCompExtended算法思想:1.搜索2.归纳3.分治4.贪心实现技巧: NOIP考前知识大总结作者:于俊超ID:MiniDragonXG2006年11月RangeSize in bytes0..2551-128..1271-32768..3276720..655352either smallint, longint or int64size 2,4 or 8either word, longword or qwordsize 2,4 or 8-2147483648..2***..42949672954-***5808..***580780..***70955161582.9E-39..1.7E3861.5E-45..3.4E3845.0E-324..1.7E3088-9.2E18..9.2E1883.4E-4932..1.1E493210(Search)枚举(穷举)/ 遍历 / 剪枝 / 产生式系统(估价函数)查找(字典):折半查找(二分法)/ 树形查找(二叉排序树)/ Hash(To 数学方法)>递推式> DP(ex: 4 Hanoi Tower Problem)(Divided and Conquer)(Greedy)5.模拟循环递推(顺推/倒推)> 博弈 / 动态规划递归(栈/DFS)滚动数组幂:x ^ y = exp(y*ln(x))x ^(1/n)= exp(1/n*ln(x))math单元里的Power数学方法:1.数论:质数 / 因数 / 约数个数(种数)/ 最大公约数 / 最小公倍数/ 回文数....2.进制转换注意负进制3.高精度运算(int64...)4.排列组合: 全排列5.经典递推关系:Fibonacci:fib(n)=fib(n-1)+fib(n-2)fib(1)=1fib(2)=1通项:设g5=sqrt(5)则fib(n)=(1/g5)*(((1+g5)/2)^n-((1-g5)/2)^n)f(n)=a1*f(n-1)+a2*f(n-2)+....+ak*f(n-k)(ai<>0 & n>k)叫k阶常系数线性齐次递推关系可以利用矩阵性质和快速幂在O(logn)内求解错位排列:F(1)=0F(2)=1Fn=(x-1)*(Fn-1 +Fn-2)Catalan数:Catalan(n)=C(n,2*n)/(n+1)第二类Stirling数 s(n,k)= { s(n-1,k-1)+k*s(n-1,k)}(n>k>=1)6.高斯消元数据结构(Data Structure):1.物理结构:I: 数组>二维平面/字符串(Ansistring)及其操作II: 指针>链表(单链表 / 双向链表 / 环状链表)抽象数据类型(Abstract Data Type)2.初级ADT:I: 集合II: 线性结构A: 栈(stack)(LIFO)operation: push/popa: 后缀表达式b: 进出站序列问题(Catalan 枚举 > 归纳)c: 栈优化最长不下降(上升)序列B: 队列(queue)>循环队列(FIFO)operation: push/popa: 广度优先搜索b: 求和广义线性表C: 字典 DictionaryIII: 非线性结构A: 树Tree(二叉树Binary Tree)树的遍历:前序/中序/后序(递归)最优二叉树(哈夫曼树Huffman tree)(贪心)树形DPB: 图Grapha: 图的遍历:Depth first Search(DFS / 回溯 / 递归)Breadth first Search(BFS / 队列 / FloodFill 种子染色法) b: 最小生成树:(贪心)Prim: 边集密Kruskal: 边集疏(排序 + 并查集)c: 最短路径Dijkstra(单源 O(n^2)BFS)Floyed(所有点间 O(n^3))Bellman-Ford(负权环)d: 拓扑序列e: 关键路径(AOV网)f: 无向图传递闭包有向图强连通分量SCC(Strong Connected Component)g: 路与回路欧拉路(Euler Route)所有边哈密尔顿路(Hamilton Route)所有点h: 割顶和桥去除之后图变得不连通的顶点和边3.高级ADT:I: 集合型A: 并查集(disjoint-set)operation: Find/Union/InsertII: 字典型哈希表(Hash)哈希函数opertaion: Find/InsertIII: 树型A: 二叉堆(Heap)>Treapoperation: Insert/Delete(Pop)/GetMax/GetMinB: Binary Search Tree(BST)C:平衡二叉树......排序算法:复杂度思路 InsertChooseExchange O(n^2)直接插入排序直接选择排序冒泡排序(Inserting Sort)(Choosing Sort)(Bubble Sort)O(nlogn)希尔排序堆排序快速排序(Shell Sort)(Heap Sort)(Quick Sort)O(n)计数排序桶排序基数排序(Counting Sort)(Bucket Sort)(Radix Sort)归并(Merge Sort)Quick Sort: 分治Merge Sort: 分治Bucket Sort: 哈希表Heap Sort: 堆还有二叉排序树..........动态规划(Dynamic programming)=记忆化搜索+用Table记录免去重复计算(解决满足具有最优子结构且无后效性)1.状态转移方程+边界条件2.合适的实现方法(To 实现技巧)3.要掌握最经典的动规题目a: 最长不下降(上升)序列b: 最大子段和&最大M子段和c: 最长公共子序列(LCS)d: 石子合并(链,环)e: 背包问题01背包-可重复(DP)01背包-不可重复(DP)部分背包(贪心)博弈问题:1.关键字:必胜态 / 必败态2.递推找规律3.归纳计算几何三角形面积s=|x1y2+x2y3+x3y1-x3y2-x2y1-x1y3|二维仿射变换反射 / 镜像 / 旋转计算二维凸包……这东西我直接听不懂……网络流 & 匹配(二分图)& 线段树 & 树状数组 & NP完全……∵九成不考∴略……Copyright ©2006 By MiniDragonXG.All rights reserved.第二篇:教师职业道德考前知识总结教师职业道德考前知识总结教师职业道德——教师在从事教育工作时所应该遵循的行为规范和必备品德的总和,是调节教师和他人、和社会关系时必须遵守的基本道德规范和行为准则,以及在此基础上所表现出来的道德观念、道德品质、道德情操。
noip普及组赛前冲刺资料全

数组一、数字数组ex1_1_1.pas级数求和(NOIP2002)【题目描述】已知:Sn=1+1/2+1/3+…+1/n。
显然对于任意一个数K,当n.足够大的时候,Sn大于K。
现给出一个整数K(1≤K≤15),要求计算出一个最小的n,使得Sn>K【输入】一行,一个整数K【输出】一行,一个整数n【输入样例】1【输出样例】2ex1_1_2.pas陶陶摘苹果(NOIP2005)【题目描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。
苹果成熟的时候,陶陶就会跑去摘苹果。
陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。
假设她碰到苹果,苹果就会掉下来。
【输入】两行数据。
第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
【输出】一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
【输入样例】100 200 150 140 129 134 167 198 200 111110【输出样例】5ex1_1_3.pas数字统计(NOIP2010)【题目描述】请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22],数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6次。
【输入】共1 行,为两个正整数L 和R,之间用一个空格隔开。
【输出】共1 行,表示数字2 出现的次数。
【输入样例】2 22【输出样例】6【输入输出样例2】2 100【输出】20【数据范围】1 ≤ L ≤ R≤ 10000。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
冲刺NOIP系列之算法整理一、高精度算法1.高精度加法procedure add(a,b:hp,var c:hp);var i:longint;beginfillchar(c,sizeof(c),0);c[0]:=1;if a[0]>b[0] thenc[0]:=a[0] else c[0]:=b[0];for i:=1 to a[0] do inc(c[i],a[i]);for i:=1 to b[0] do inc(c[i],b[i]);for i:=1 to c[0] dobeginc[i+1]:=c[i+1]+c[i] div 10;c[i]:=c[i] mod 10;end;while c[c[0]+1]>0 dobegininc(c[0]);c[c[0]+1]:=c[c[0]+1]+c[c[0]] div 10;c[c[0]]:=c[c[0]] mod 10;end;end;2.高精度减法procedure minus(a,b:hp;var c:hp);var i:longint;beginfillchar(c,sizeof(c),0); c[0]:=a[0];for i:=1 to c[0] do c[i]:=a[i]-b[i];for i:=1 to c[0] doif c[i]<0 thenbegindec(c[i+1]);c[i]:=c[i]+10;end;while (c[0]>1)and(c[c[0]]=0) do dec(c[0]);end;3.高精度乘法(单精、高精)procedure mulnum(a:hp;x:longint;var c:hp);var i:longint;beginfillchar(c,sizeof(c),0);c[0]:=a[0];for i:=1 to c[0] do c[i]:=a[i]*x;for i:=1 to c[0] dobeginc[i+1]:=c[i+1]+c[i] div 10;c[i]:=c[i] mod 10;end;while c[c[0]+1]>0 dobegininc(c[0]);c[c[0]+1]:=c[c[0]+1]+c[c[0]] div 10;c[c[0]]:=c[c[0]] div 10;end;end;procedure mul(a,b:hp;var c:hp);var i:longint;beginfillchar(c,sizeof(c),0);c[0]:=a[0]+b[0]-1;for i:=1 to a[0] dofor j:=1 to b[0] doinc(c[i+j-1],a[i]*b[i]);for i:=1 to c[0] dobeginc[i+1]:=c[i+1]+c[i] div 10;c[i]:=c[i] mod 10;end;while c[c[0]+1]>0 dobeginc[c[0]+1]:=c[c[0]+1]+c[c[0]] div 10;c[c[0]]:=c[c[0]] mod 10;end;end;4.高精度除法procedure divnum(a:hp;x:longint;var c:hp;var d:longint); var i:longint;begind:=0; fillchar(c,sizeof(c),0); c[0]:=a[0];for i:=c[0] downto 1 dobegind:=d*10+a[i];c[i]:=d div x;d:=d mod x;end;while (c[0]>1)and(c[c[0]]=0) do dec(c[0]);end;5.高精度比较function compare(a,b:hp):longint;beginwhile a[a[0]]=0 do dec(a[0]);while b[b[0]]=0 do dec(b[0]);while a[a[0]+1]>0 do inc(a[0]);while b[b[0]+1]>0 do inc(b[0]);if a[0]>b[0] then exit(1);if a[0]<b[0] then exit(-1);for i:=a[0] downto 1 dobeginif a[i]>b[i] then exit(1);if a[i]<b[i] then exit(-1);end;exit(0);end;二、数学算法1.欧几里得(最大公约数)function gcd(a,b:longint):longint;beginif b=0 then exit(a)else gcd:=gcd(b,a mod b);end;2.同余方程vara,b,x,y,k,n,m2,m1,a2,a1,g,t,c:longint;flag:boolean;function extended_gcd(a,b:longint;var x,y:longint):longint; vart:longint;beginif b=0 thenbeginx:=1; y:=0;exit(a);end;extended_gcd:=extended_gcd(b,a mod b,x,y);t:=x;x:=y;y:=t - (a div b)*y;end;beginread(n);read(m1,a1);while n>1 dobegindec(n);read(m2,a2);g:=extended_gcd(m1,m2,x,y);c:=a2-a1;if c mod g<>0 then begin flag:=true;break;end;k:=m2 div g;t:=(c div g *x mod k+k) mod k;a1:=a1+t*m1;m1:=m1 div g *m2;end;if flag=false then write(a1) else write(-1);close(input);close(output);end.3.快速幂function soso(a,b:longint):longint;var total:longint;begintotal:=1;while b>0 dobeginif odd(b) then total:=(total*a) mod 10000;b:=b shr 1;a:=(a*a) mod 10000;end;exit(total);end;三、图论1.spfavara,b,e:array[1..1000] of longint;vis:array[1..2000] of boolean;q,d,f:array[1..2001] of longint;n,m,i,s,t:longint;procedure qsort(l,r:longint);var i,j,x,y:longint;beginx:=a[(l+r) shr 1];repeatwhile a[i]<x do inc(i);while a[j]>x do dec(j);if not(i>j) thenbeginy:=a[i]; a[i]:=a[j]; a[j]:=y;y:=b[i]; b[i]:=b[j]; b[j]:=y;y:=e[i]; e[i]:=e[j]; e[j]:=y;inc(i); dec(j);end;until i>j;if i<r then qsort(i,r);if l<j then qsort(l,j);end;procedure spfa(s:longint);var i,k,l,t:longint;beginfillchar(vis,sizeof(vis),0);for i:=1 to n dod[i]:=maxlongint;d[s]:=0;l:=0; t:=1; q[1]:=s; vis[s]:=true; repeatl:=l mod 10000 +1;k:=q[l];for i:=f[k] to f[k+1]-1 doif d[k]+e[i]<d[b[i]] thenbegind[b[i]]:=d[k]+e[i];if not vis[b[i]] then begint:=t mod 10000 +1;q[t]:=b[i];vis[b[i]]:=true;end;end;vis[k]:=false;until l=t;end;beginreadln(n,m);for i:=1 to m doreadln(a[i],b[i],e[i]);for i:=1 to m doif f[a[i]]=0 then f[a[i]]:=i;f[n+1]:=m+1;for i:=n downto 1 doif f[i]=0 then f[i]:=f[i+1];readln(s,t);spfa(s);writeln(d[t]);end.2.dijkstravar dist:Array[1..1001,1..1001] of longint;n,m,i,j:longint;aa,bb,zz:longint;v:array[1..1001] of boolean;procedure dijkstra(s:longint);var i,j,min,k:longint;beginv[s]:=true;dist[s,s]:=0;for i:=1 to n-1 dobeginmin:=10000000;for j:=1 to n doif (dist[s,j]<min)and(not v[j]) thenbegin k:=j; min:=dist[s,j]; end;v[k]:=true;for j:=1 to n doif dist[k,j]>0 thenif (dist[s,k]+dist[k,j]<dist[s,j])or(dist[s,j]=0) thendist[s,j]:=dist[s,k]+dist[k,j];end;end;beginreadln(n,m);for i:=1 to m dobeginreadln(aa,bb,zz);dist[aa,bb]:=zz;end;dijkstra(1);for i:=2 to n do writeln(dist[1,i]);end.3. kruskalvar f:array[1..105] of longint;a,b,w:array[1..10005] of longint;n,i,j,k,x,y,total:longint;procedure kuaipai(st,ed:longint);var i,j,mid:longint;beginif st>=ed then exit;i:=st-1; j:=ed+1;mid:=w[(st+ed) >> 1];while i<j dobeginrepeat inc(i) until w[i]>=mid;repeat dec(j) until w[j]<=mid;if i<j thenbeginw[i]:=w[i] xor w[j];w[j]:=w[i] xor w[j];w[i]:=w[i] xor w[j];a[i]:=a[i] xor a[j];a[j]:=a[i] xor a[j];a[i]:=a[i] xor a[j];b[i]:=b[i] xor b[j];b[j]:=b[i] xor b[j];b[i]:=b[i] xor b[j];end;end;kuaipai(st,j); kuaipai(j+1,ed);end;function find(v:longint):longint;beginif f[v]=v then exit(v)elsebeginf[v]:=find(f[v]);find:=f[v];end;end;beginreadln(n);k:=0;for i:=1 to n dofor j:=1 to n dobeginread(x);if j>i then continue;inc(k);a[k]:=i;b[k]:=j;w[k]:=x;end;kuaipai(1,k);for i:=1 to n do f[i]:=i;total:=0;for i:=1 to k dobeginx:=find(a[i]); y:=find(b[i]);if x<>y thenbegininc(total,w[i]);f[x]:=y;end;end;writeln(total);end.4. 并查集beginfor i:=1 to n do f[i]:=i;function find(v:longint):longint;beginif f[v]=v then exit(v)elsebeginf[v]:=find(f[v]);exit(f[v]);end;end;for i:=1 to n do find(i);end;4.trajan①(强连通分量)varv,f :array[1..100]of boolean; dfn,low :array[1..100]of integer;a :array[0..100,0..100]of integer; i,j,n,m,x,y,deep,d:integer;count:longint;stack :array[1..100]of integer; function min(x,y:longint):integer;beginif x>y then exit(y) else exit(x);end;procedure print(x:integer);beginwhile stack[deep]<>x dobeginwrite(stack[deep],' ');f[stack[deep]]:=false;dec(deep);end;writeln(stack[deep]);f[stack[deep]]:=false;dec(deep);end;procedure dfs(x:integer);vari:integer;begininc(d); dfn[x]:=d;low[x]:=d; inc(deep);stack[deep]:=x;f[x]:=true;for i:=1 to a[x,0] doif not v[a[x,i]] thenbeginv[a[x,i]]:=true;dfs(a[x,i]);low[x]:=min(low[a[x,i]],low[x]);endelseif f[a[x,i]] thenbegin inc(count); low[x]:=min(low[x],dfn[a[x,i]]);end;if dfn[x]=low[x] then print(x);end;begincount:=0;readln(n,m);fillchar(a,sizeof(a),0);for i:=1 to m dobeginreadln(x,y);inc(a[x,0]);a[x,a[x,0]]:=y;end;for i:=1 to n doif not v[i] thenbeginv[i]:=true;dfs(i);end;writeln(count);end.②(求LCA)var n,m,q:longint;f,colour:array[1..1000]of longint;lca:array[1..1000,1..1000]of longint;g:array[1..1000,1..1000]of boolean;function find(x:longint):longint;beginif f[x]=x then exit(x);find:=find(f[x]);end;procedure tarjan(u:longint);var i,j:longint;beginf[u]:=u;colour[u]:=1;for i:=1 to n doif (g[u,i])and(colour[i]=0) then begin tarjan(i);f[i]:=u;end;for i:=1 to n doif (colour[i]=2)then begin lca[u,i]:=find(i);lca[i,u]:=lca[u,i];end; colour[u]:=2;end;procedure init;var i,j,x,y:longint;beginread(n,m,q);for i:=1 to m dobeginread(x,y);g[x,y]:=true;g[y,x]:=true;end;for i:=1 to n do f[i]:=i;end;procedure main;var i,j:longint;beginif f[i]=i then tarjan(i);end;procedure print;var i,j,x,y:longint;beginfor i:=1 to q dobeginread(x,y);write(lca[x,y]);end;end;begininit;main;print;end.四、基本算法策略1.KMPvar s:ansistring;m,ans:longint;next,l,r,temp:array[0..10000]of longint; procedure get_next(t:ansistring);var i,j,k,l:longint;beginl:=length(t);k:=0; next[1]:=0;for i:=2 to l dobeginwhile (k>0)and(t[i]<>t[k+1]) do k:=next[k];if t[i]=t[k+1] then inc(k);next[i]:=k;end;end;procedure kmp1(s,t:ansistring);var i,j,l1,l2,k:longint;beginfillchar(next,sizeof(next),0);get_next(t);k:=0;l1:=length(s);l2:=length(t);beginwhile (k>0)and(s[i]<>t[k+1]) do k:=next[k];if s[i]=t[k+1] then inc(k);l[i]:=k;if k=l2 then exit;end;end;procedure uget_next(t:ansistring);var i,j,l,k:longint;beginfillchar(next,sizeof(next),0);l:=length(t);k:=l+1;next[l]:=k;for i:=l-1 downto 1 dobeginwhile (k<l+1)and(t[i]<>t[k-1]) do k:=next[k];if t[i]=t[k-1] then dec(k);next[i]:=k;end;end;procedure kmp2(s,t:ansistring);var i,j,l1,l2,k:longint;beginuget_next(t);l1:=length(s);l2:=length(t);k:=l2+1;for i:=l1 downto 1 dobeginwhile (k<l2+1)and(t[k-1]<>s[i]) do k:=next[k];if s[i]=t[k-1] then dec(k);r[i]:=l2+1-k;if k=1 then exit;end;end;procedure check(s,ss:ansistring);var i,j,l1,l2:longint;beginl1:=length(s);l2:=length(ss);for i:=1 to l1 doif l[i]<l[i-1] then l[i]:=l[i-1];for i:=1 to l1-1 doif l[i]+r[i+1] >=l2 then begin inc(ans);break;end; end;procedure main;var i,j,n:longint;ss:ansistring;beginreadln(s);readln(m);for i:=1 to m dobeginreadln(ss);if length(ss)<2 then continue;kmp1(s,ss);kmp2(s,ss);check(s,ss);end;end;beginmain;write(ans);end.2.RMQvar fmax,fmin:array[0..20,1..51000] of longint;n,i,j,ma,mi,l,r,q,t:longint;function max(x,y:longint):longint;beginif x>y then exit(x) else exit(y);end;function min(x,y:longint):longint;beginif x>Y then exit(y) else exit(x);end;beginreadln(n,q);t:=trunc(ln(n)/ln(2));for i:=1 to n dobeginreadln(fmax[0,i]);fmin[0,i]:=fmax[0,i];end;for i:=1 to t dofor j:=1 to n dobeginfmax[i,j]:=max(fmax[i-1,j],fmax[i-1,j+(1 << (i-1))]);fmin[i,j]:=min(fmin[i-1,j],fmin[i-1,j+(1 << (i-1))]);end;for i:=1 to q dobeginreadln(l,r);t:=trunc(ln(r-l+1)/ln(2));ma:=max(fmax[t,l],fmax[t,r-(1 << t)+1]);mi:=min(fmin[t,l],fmin[t,r-(1 << t)+1]);writeln(ma,' ',mi);end;end.3. 单调队列vartemp,ans:int64;n,p,q,i,j:longint;a:array[0..400000] of longint;b,r,l:array[0..400000] of longint;beginreadln(n);for i:=1 to n do read(a[i]);p:=1;q:=0;for i:=1 to n+1 dobeginwhile (p<=q) and (a[i]<a[b[q]]) dobeginr[b[q]]:=i;dec(q);end;inc(q);b[q]:=i;end;fillchar(b,sizeof(b),0);p:=1;q:=0;for i:=n downto 0 dobeginwhile (p<=q) and (a[i]<a[b[q]]) dobeginl[b[q]]:=i;dec(q);end;inc(q);b[q]:=i;end;for i:=1 to n dobegintemp:=(r[i]-l[i]-1)*a[i];if temp>ans then ans:=temp;end;writeln(ans); end.。