冲刺NOIP之整理
- 格式:doc
- 大小:74.50 KB
- 文档页数:15
分区联赛初赛复习材料初赛考的知识点就是计算机基本常识、基本操作和程序设计基础知识。
其中选择题考查的是知识,而问题解决类型的题目更加重视能力的考查。
一般说来,选择题只要多用心积累就可以了。
问题解决题目的模式比较固定,大家应当做做以前的题目。
写运行结果和程序填空也需要多做题目,并且培养良好的程序阅读和分析能力,就像语文的阅读理解一样。
近几年来,初赛的考查范围有了很大的变化,越来越紧跟潮流了。
这就需要大家有比较广泛的知识,包括计算机硬件、软件、网络、简单的数据结构(例如栈、队列、树和图等)和简单的算法(例如排序、查找和搜索等),程序设计语言以及一些基本的数学知识和技巧(例如排列组合)。
但最主要的,还是取决于你对程序设计语言的熟悉程度,再加上认真仔细的心态。
选择题、硬件计算机发展可划分:1946年2月,在美国宾夕法尼亚大学诞生了世界上第一台电子计算机ENIA Q Electronic Numerical Integrator And Computer),这台计算机占地170 平方米,重30 吨,用了18000 多个电子管,每秒能进行5000次加法运算。
冯•诺依曼理论1944年,美籍匈牙利数学家冯•诺依曼提出计算机基本结构和工作方式的设想,为计算机的诞生和发展提供了理论基础。
时至今日,尽管计算机软硬件技术飞速发展,但计算机本身的体系结构并没有明显的突破,当今的计算机仍属于冯•诺依曼架构。
其理论要点如下:1、计算机硬件设备由存储器、运算器、控制器、输入设备和输出设备5部分组成。
2、存储程序思想一一把计算过程描述为由许多命令按一定顺序组成的程序,然后把程序和数据一起输入计算机,计算机对已存入的程序和数据处理后,输出结果。
微型机的主要技术指标1、字长:知己算计能够直接处理的二进制数据的位数。
单位为位(BIT)2、主频:指计算机主时钟在一秒钟内发岀的脉冲数,在很大程度上决定了计算机的运算速度。
3、内存容量:是标志计算机处理信息能力强弱的一向技术指标。
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初赛复习知识点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。
相关知识点与参考答案一.单项选择题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考前知识大总结数据类型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.第二篇:教师职业道德考前知识总结教师职业道德考前知识总结教师职业道德——教师在从事教育工作时所应该遵循的行为规范和必备品德的总和,是调节教师和他人、和社会关系时必须遵守的基本道德规范和行为准则,以及在此基础上所表现出来的道德观念、道德品质、道德情操。
数组一、数字数组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。
冲刺NOIP2009模拟试题与解析(六)广东省中山纪念中学宋新波(普及组复赛)题目说明:1.文件名(程序名和输入输出文件名)必须使用小写;2.C/C++中函数ma i n()的返回值类型必须是int,程序正常结束时的返回值必须是0;3. 每道题目都必须建立文件夹。
1.上学路线(route.pas/c/cpp)【题目描述】你所在城市的街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道。
南北方向的a条街道从西到东依次编号为l到a,而东西方向的b条街道从南到北依次编号为l到b,南北方向的街道i和东西方向的街道j的交点记为(i,j)。
你住在(1,1)处,而学校在(a,b)处,你骑自行车去上学,自行车只能沿着街道走,而且为了缩短时间只允许沿着向东和北的方向行驶。
现在有N个交叉路口在施工(X1,Yl)、(X2,Y2)……,(Xn,Yn),这些路口是不能通车的。
问你上学一共有多少走法?【输入格式】第一行包含两个整数a和b,并且满足1≤a,b≤16。
第二行包含一个整数N,表示有N个路口在维修(1≤N≤40)。
接下来N行,每行两个整数X_i,Y_i,描述路口的位置。
【输出格式】输出一个整数表示从(1,1)到(a,b)的行车路线总数。
【样例数据解释】JOI High School(5,4)(1,1)Taro ’s Home2.遗址(ruin .pas /c /cpp)【题目描述】很久很久以前有一座寺庙,从上往下看寺庙的形状正好是一个正方形,由4个角上竖立的圆柱搭建而成。
现在圆柱都倒塌了,只在地上留下圆形的痕迹,可是现在地上有很多这样的痕迹,专家说一定是最大的那个。
写一个程序,给出圆柱的坐标,找出由4个圆柱构成的最大的正方形,因为这就是寺庙的位置,要求计算出最大的面积。
注意正方形的边不一定平行于坐标轴。
例如右上图有l0根柱子,其中(4,2),(5,2),(5,3),(4,3)可以形成一个正方形,(1,1),(4,O),(5,3),(2,4)也可以,后者是其中最大的,面积为l0。
目录搜索 (4)DFS (4)框架 (4)优化 (4)BFS (4)框架 (4)优化 (5)排序 (5)冒泡排序 (5)选择排序 (5)插入排序 (6)桶排序 (6)快速排序 (7)堆排序 (7)数学定理 (8)中国剩余定理 (8)康托展开 (9)错排通项 (9)费马大定理 (9)费马小定理 (9)逆元 (9)欧拉函数 (10)Stirling数 (10)Stirling's approximation (10)数论 (11)GCD&LCM (11)素数 (11)快速幂 (12)模运算法则 (13)组合和全排列 (13)阶乘 (13)约瑟夫环问题 (13)Catalan数 (14)扩展欧几里德算法 (15)对自然数因子的计算 (15)矩阵乘法 (16)位运算 (16)动态规划 (18)步骤 (18)关键 (19)格式 (19)推荐参考资料 (19)推荐习题 (20)图论算法 (20)回路问题 (20)Euler回路 (20)Hamilton回路 (20)一笔画问题 (20)图的遍历 (23)DFS (23)BFS (23)最短路径 (25)dijkstra算法 (25)floyd算法 (26)spfa算法 (27)最小生成树 (29)prim算法 (29)Kruskal算法 (31)topology排序 (32)关键路径 (33)利用拓扑排序 (33)按照概念 (35)次短路 (36)次小生成树 (36)匈牙利算法 (37)博弈 (38)取对称状态 (38)取NIM值 (38)分治 (39)回溯 (41)N皇后 (41)Hanoi Tower (41)高精度计算 (42)高精度加法 (42)高精度减法 (42)高精度乘法 (44)高精度阶乘 (48)高级数据结构 (49)二叉树 (49)并查集 (51)树状数组 (52)线段树 (52)二叉搜索树 (54)进制转换 (59)1.将m进制数n转化成一个十进制数 (59)2.将十进制数n转换成m进制数 (59)搜索DFS框架procedure dfs(x);varbeginif达到目标状态then输出结果并退出过程;if满足剪枝条件then exit;for i:=1to搜索宽度dobegin备份现场;(注意如果现场使用了全局变量,则需要使用局部变量备份)dfs(参数+增量);恢复现场;end;优化(1)最优化剪枝:求最优值时,当前的状态无论如何不可能比最优值更优,则退出,可与展望结合剪枝(2)可行性剪枝:提前判断该状态是否能得到可行解,如不能则退出(3)记忆化搜索:对于已经搜索过的状态直接退出(4)改变搜索顺序:对于看起来希望更大的决策先进行搜索(5)优化搜索策略(6)预处理找到大体搜索翻译(7)改写成IDA*算法(8)卡时(注意现在联赛中禁止使用meml掐时)BFS框架初始化;把初始布局存入设首指针head=0;尾指针tail:=1;repeatinc(head),取出队列首记录为当前被扩展结点;for i:=1to规则数do{r是规则编号}beginif新空格位置合法thenbeginif新布局与队列中原有记录不重复tail增1,并把新布局存入队尾;if达到目标then输出并退出;end;end;until head>=tail;{队列空}优化判重的优化:hash,二叉排序树双向广搜或启发式搜索改写成A*算法二分优化排序冒泡排序var a:array[1..100] of longint;t,n,i,j:longint; procedure sort;beginfor i:=1to n-1do{与每个数都进行比较}for j:=1to n-i doif a[j]>a[j+1] thenbegint:=a[j];a[j]:=a[j+1];a[j+1]:=t;end;end;选择排序var a:array[1..100] of longint;t,n,i,j:longint;procedure sort;beginfor i:=1to n-1dofor j:=1+i to n do{大数沉小数浮}if a[j]>a[i] thenbegint:=a[j];a[j]:=a[i];a[i]:=t;end;end;插入排序var a:array[0..100] of longint;n,i,j,t:longint;procedure sort;beginfor i:=2to n dofor j:=1to (i-1) dobeginif (a[i]<a[j]) thenbegint:=a[j];a[j]:=a[i];a[i]:=t;end;end;end;桶排序var a,b:array[0..100] of longint;r,i,j,t,k,n:longint; procedure sort;beginfor i:=0to100do b[i]:=0;{为B数组清零,小桶内容清零} for i:=1to n do b[a[i]]:=b[a[i]]+1;{桶的序号就是那个要排序的东西;出现一次,桶里得旗数加一} for i:=0to100do{扫描所有的桶}beginif b[i]<>0then{桶里有旗}for j:=1to b[i] do write(i,'');{桶的序号就是那个数} end;end;快速排序var a:array[1..100] of longint;n,i,h,g:longint;procedure kp(l,r:longint);{变量不能与全局变量相同,否则会被抹去} var b,m,i,j,t:longint;begini:=l;j:=r;m:=a[(l+r) div2];{基准数最好从中间取}repeatwhile a[j]>m do dec(j);while a[i]<m do inc(i);{两侧的哨兵移动}if i<=j then{哨兵未碰面}{“=”利用repeat循环的性质,使repeat循环得以结束} begint:=a[j];a[j]:=a[ia[i]:=t;{交换两个哨兵的值}inc(j);dec(j);{哨兵继续运动}end;until i>j;if j>l then kp(l,j);if i<r then kp(i,r);{都是循环不结束后进行的动作}end;beginread(n);for i:=1to n do read(a[i]);kp(1,n); {“一”位置与“N”位置}for i:=1to n-1do write(a[i],'');write(a[n]);{防止多输出空格使程序结果出错}end.堆排序var a:array[1..100] of longint;n,i,b:longint;procedure jianshu(i:longint);beginwhile ((a[i]>a[i*2])or(a[i]>a[i*2+1]))and(i<=n div2) do{当父亲数大于子女数时并且他有孩子时进行}beginif a[i*2]<=a[i*2+1]{左儿子小于右儿子}thenbeginb:=a[i*2]; a[i*2]:=a[i];a[i]:=b;{左右儿子的值互换}jianshu(i*2);{继续为左儿子建树}endelsebeginb:=a[i*2+1];a[i*2+1]:=a[i];a[i]:=b;jianshu(i*2+1);{上同,不过是为右儿子建树}end;end;end;procedure tiao;beginwhile n<>0dobeginwrite(a[1]);a[1]:=a[n];n:=n-1;for i:=(n div2) downto1dojianshu(i);end;end;beginread(n);for i:=1to n doread(a[i]);for i:=(n div2) downto1dojianshu(i);tiao;end.数学定理中国剩余定理若有一些两两互质的整数m1, m2,… mn,则对任意的整数:a1,a2,...an,以下联立同余方程组对模数m1, m2,… mn 有公解:康托展开a[i]为当前未出现的元素中是排在第几个(从0开始)把一个整数X展开成如下形式:X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0!其中a[i]为当前未出现的元素中是排在第几个(从0开始),并且0<=a[i]<i(1<=i<=n)错排通项考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。
NOIP初赛复习提纲综述:初赛考的知识点就是计算机基本常识、基本操作和程序设计基础知识。
其中选择题考查的是知识,而问题解决类型的题目更加重视能力的考查。
一般说来,选择题只要多用心积累就可以了。
问题解决题目的模式比较固定,大家应当做做以前的题目。
写运行结果和程序填空也需要多做题目,并且培养良好的程序阅读和分析能力,就像语文的阅读理解一样。
近几年来,初赛的考查范围有了很大的变化,越来越紧跟潮流了。
这就需要大家有比较广泛的知识,包括计算机硬件、软件、网络、简单的数据结构(例如栈、队列、树和图等)和简单的算法(例如排序、查找和搜索等),程序设计语言以及一些基本的数学知识和技巧。
第一部分计算机基础知识1.计算机的发展知识点: 1>.计算机的发展阶段(4代,标志及主要特点)2>.ENIAC,图灵,冯.诺依曼, Ada Lovelace (第一个程序员)2.计算机系统知识点:1>.计算机硬件a.组成:运算器,控制器,存储器,IO设备;b.CPU: 字长,主频(时钟频率),总线;c.存储器: 内(ROM,RAM),外存储器,种类,单位,存取速度;d.输入输出设备:扫描仪,数字化仪,绘图仪,打印机(种类)2>.计算机软件:a. BIOS (功能);b.系统软件(包括操作系统:DOS,LINUX,UNIX,WINDOWS,OS/2,MAC/OS和语言的解释或编译程序);解释程序: 高级语言翻译的一种,它将源语言(如basic)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序.翻译程序: (编译程序)一类很重要的语言处理程序,它把高级语言(如FORTRAN,COBOL,pascal,c等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果.语言: 机器语言汇编语言高级语言(面向对象,面向过程)c. 应用软件数据库管理软件:Foxpro,Access,Orale,Sybase,DB2和Informix等。
NOIP初赛知识点《NOIP 初赛知识点》NOIP(National Olympiad in Informatics in Provinces,全国青少年信息学奥林匹克联赛)是一项具有挑战性和趣味性的竞赛活动。
对于想要参加 NOIP 初赛的同学来说,了解相关的知识点是非常重要的。
下面,我们就来一起梳理一下 NOIP 初赛的一些关键知识点。
首先是计算机基础知识。
这部分包括计算机的发展历程、计算机的组成结构(比如硬件系统中的中央处理器 CPU、内存、硬盘、输入输出设备等,以及软件系统中的操作系统、应用软件等)。
了解不同类型计算机的特点和应用场景,比如超级计算机、服务器、个人电脑、嵌入式系统等,也是很有必要的。
操作系统的知识也不容忽视。
要熟悉常见的操作系统,如Windows、Linux 等,了解它们的基本操作和功能。
文件管理、进程管理、存储管理等概念需要清楚掌握。
同时,对于一些常用的命令行操作,也要有所了解和熟悉。
计算机网络是另一个重要的部分。
要明白网络的分类,比如局域网、广域网等。
了解网络的拓扑结构,像总线型、星型、环型等。
网络协议,比如 TCP/IP 协议,以及 IP 地址、子网掩码、网关等概念,都是必须要弄清楚的。
还要知道网络的应用,比如电子邮件、万维网、文件传输等。
编程语言是参加 NOIP 必不可少的知识。
C++语言通常是比赛中使用的主要语言。
需要掌握基本的语法,如变量、数据类型(整型、浮点型、字符型、布尔型等)、控制结构(顺序结构、选择结构、循环结构)、数组、指针、函数等。
同时,要能够熟练运用编程解决一些基本的问题,比如排序、查找等。
数据结构也是初赛的重点。
链表、栈、队列、树(二叉树、平衡树等)、图等常见的数据结构,要理解它们的特点、存储方式和基本操作。
例如,链表的插入和删除操作,栈的后进先出原则,队列的先进先出原则,二叉树的遍历方式(前序、中序、后序)等。
算法知识同样关键。
常见的算法,如枚举算法、贪心算法、递归算法、分治算法、动态规划等,要理解它们的思想和应用场景。
noip提高组初赛复习资料NOIP(全国青少年信息学奥林匹克竞赛)是中国著名的信息学竞赛,分为提高组和普及组两个级别。
提高组是面向有一定编程基础和算法理论知识的学生,而初赛则是提高组的第一轮选拔赛。
为了在初赛中取得好成绩,复习资料是必不可少的。
本文将介绍一些可以提高组初赛复习的资料和方法。
首先,要准备的资料包括算法书籍、编程题库和历年真题。
算法书籍可以帮助我们理解常见的算法思想和解题技巧。
例如,《算法导论》是一本经典的算法教材,涵盖了很多重要的算法和数据结构。
此外,《挑战程序设计竞赛》、《算法竞赛入门经典》等书籍也是不错的选择。
编程题库可以帮助我们提高编程能力和解题速度。
一些常用的编程题库包括LeetCode、Codeforces等。
此外,历年真题是了解考试内容和考点的重要途径,可以通过搜索引擎或者向老师、学长学姐等寻求获得。
其次,要进行有针对性的学习和练习。
在复习过程中,可以根据自己的实际情况选择性地学习一些重点知识点。
例如,动态规划、图论、搜索算法等都是常见的考点。
针对这些知识点,可以通过查阅资料、观看视频教程等方式进行学习。
同时,要进行大量的练习,通过做题来巩固所学知识。
可以选择一些经典的算法题目进行练习,也可以通过参加在线编程比赛来提高自己的解题能力。
在练习过程中,要注重思考和总结,及时发现自己的不足之处,并加以改进。
此外,要进行团队合作和交流。
NOIP是一个团队赛事,团队合作和交流是非常重要的。
可以组建一个学习小组,与其他有志于参加NOIP的同学一起学习和讨论。
在小组中,可以相互交流解题思路、分享学习资料,共同进步。
此外,可以参加一些线下或线上的信息学交流活动,与其他选手交流经验,互相学习。
最后,要保持良好的心态和健康的生活习惯。
NOIP是一场高强度的比赛,需要有良好的心态和体力来面对挑战。
在复习过程中,要保持积极乐观的心态,不要过分焦虑和压力过大。
同时,要保持良好的生活习惯,合理安排作息时间,保证充足的睡眠和饮食,保持身体健康。
冲刺NOIp2016算法模板(C++)Catalogue:•冲刺NOIp2016算法模板o数据结构▪栈▪队列▪树状数组▪单调队列o STL▪Vector▪Queue▪Priority_queue▪Stack▪Deque▪Bitset▪Set▪Multiset▪Map▪Algorithm里其他好用的函数▪Next_permutation▪Lower_bound与Upper_bound▪Merge▪sort▪Reverse▪Unique▪Random_shuffleo数论▪快速幂▪普通快速幂▪矩阵快速幂▪筛法求素数▪欧拉筛法▪验证素数▪普通方法▪Miller-Rabin▪分解质因数唯一分解定理▪最大公约数和最小公倍数▪扩展欧几里德▪逆元▪Catalan数o高精▪读入储存与输出▪高精度加法▪高精加单精▪高精加高精▪高精度乘法▪高精乘单精▪高精乘高精▪高精度除法▪高精度除以单精度▪压位o图论▪最短路▪SPFA▪次短路▪最小生成树MST▪Kruskal▪图的遍历▪Floyed▪二分图染色o树▪建树▪传递闭包▪并查集▪LCAo动态规划▪线性DP▪最大递增子序列和▪最大连续子序列和▪最长公共自序列和▪字符串转换问题▪最长不下降子序列▪背包DP▪01背包▪完全背包▪混合背包▪分组背包o其他模板▪归并排序▪二分▪Hash数据结构栈int strack[maxn];int head;bool b[maxn];void push(int x) {strack[++head]=x; b[x]=true;};int pop(){int ret;ret=strack[head--]; b[ret]=false; return ret;};bool empty(){return head>0;}•1•2•3•4•5•6•7•8•9•10•11•12•13•14•15•16•17•18•19•20•21•22队列int queue[2*maxn];int tail,head;bool b[maxn];void push(int x){queue[++tail]=x;bool[x]=true;};int pop(){int ret;ret=queue[++head];b[ret]=false;return ret;};bool empty(){return head>=tail;};•1•2•3•4•5•6•7•8•9•10•11•12•13•14•15•16•17•18•19•20•21•22当然有的时候你手写的数据结构需要比较大的空间,这样队列就会造成很多损失,所以相应的就有两种解决方法:一:STL;二:循环队列,只需改两个地方(代码如下);head=(head+1)%n+1;//把head++改tail=(tail+1)%n+1;//把tail++改•1•2树状数组int lowbit(int x){return x&-x;};int getsum(int n) //求1~n见的和{int ret=0;while(n){ret+=c[n];n-=lowbit(n);};return ret;};void add(int n,int x) //给a[n]加上x{a[n]+=x;while(n<=maxn){c[n]+=x;n+=lowbit(n);•1•2•3•4•5•6•7•8•9•10•11•12•13•14•15•16•17•18•19•20•21•22•23应用模型:•树状数组求逆序对:void update(int n) {while(n<=maxn) {c[n]+=1;n+=lowbit(n); };};for(int i = 1; i <= n; ++i) //主程序里面加上这个{update(reflect[i]);ans += i - getsum(reflect[i]);//reflect是离散化后的数组}•1•2•3•4•5•6•7•8•9•10•11•12•13•14单调队列•例题:Luogu P1823 音乐会的等待(我写了一篇此题的解题报告)以下单调队列的标程就用的音乐会的等待的。
noip初赛复习资料NOIP初赛复习资料NOIP(全国青少年信息学奥林匹克竞赛)是中国最具权威性的计算机竞赛之一,旨在选拔优秀的青少年计算机人才。
对于想要参加NOIP初赛的学生来说,复习资料的准备是至关重要的。
本文将为大家介绍一些NOIP初赛的复习资料,希望能对大家有所帮助。
一、算法和数据结构在NOIP初赛中,算法和数据结构是最为重要的考察内容之一。
因此,学生们需要掌握一些基本的算法和数据结构,如递归、排序算法、图论算法等。
可以通过阅读相关的教材、参加培训班或者自学来掌握这些知识。
同时,还可以通过刷题来巩固所学的算法和数据结构知识,例如通过在线编程平台上的题目或者NOIP历年真题。
二、编程语言NOIP初赛要求学生使用C、C++、Pascal等编程语言进行编程。
因此,学生们需要熟悉自己所选择的编程语言的语法和特性。
可以通过阅读相关的编程语言教材、参加培训班或者自学来掌握编程语言知识。
此外,还可以通过编写小程序来练习编程,例如编写一些简单的算法和数据结构的实现。
三、实际问题解决能力NOIP初赛不仅考察学生的算法和编程能力,还考察学生的实际问题解决能力。
因此,学生们需要具备一定的实际问题解决能力。
可以通过参加一些编程竞赛、解决实际问题或者进行项目开发来提升自己的实际问题解决能力。
此外,还可以通过阅读相关的技术书籍、参加技术讲座或者与他人交流来扩展自己的知识面和视野。
四、NOIP历年真题NOIP历年真题是学生们复习的重要参考资料之一。
通过做历年真题,学生们可以了解考试的难度和题型,熟悉考试的流程和规则。
可以通过在网上搜索或者向学长学姐、老师等寻求历年真题。
在做历年真题的过程中,学生们可以发现自己的不足之处,并有针对性地进行复习和提高。
五、合理安排时间NOIP初赛的复习需要有一个合理的时间安排。
学生们需要根据自己的实际情况,合理安排每天的学习时间。
可以将复习内容分成小块,每天集中精力学习一两个小块内容,避免一次性学习太多内容而导致学习效果不佳。
冲刺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.。