当前位置:文档之家› ACM常用算法及其相应的练习题

ACM常用算法及其相应的练习题

ACM常用算法及其相应的练习题
ACM常用算法及其相应的练习题

ACM常用算法及其相应的练习题

2007-12-03 23:48

OJ上的一些水题(可用来练手和增加自信)

(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3 094)

初期:

一.基本算法:

(1)枚举. (poj1753,poj2965)

(2)贪心(poj1328,poj2109,poj2586)

(3)递归和分治法.

(4)递推.

(5)构造法.(poj3295)

(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)

二.图算法:

(1)图的深度优先遍历和广度优先遍历.

(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)

(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)

(3)最小生成树算法(prim,kruskal)

(poj1789,poj2485,poj1258,poj3026)

(4)拓扑排序 (poj1094)

(5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020)

(6)最大流的增广路算法(KM算法). (poj1459,poj3436)

三.数据结构.

(1)串 (poj1035,poj3080,poj1936)

(2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299)

(3)简单并查集的应用.

(4)哈希表和二分查找等高效查找法(数的Hash,串的Hash)

(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)

(5)哈夫曼树(poj3253)

(6)堆

(7)trie树(静态建树、动态建树) (poj2513)

四.简单搜索

(1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)

(2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)

(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)

五.动态规划

(1)背包问题. (poj1837,poj1276)

(2)型如下表的简单DP(可参考lrj的书 page149):

1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)

2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公

共子序列)

(poj3176,poj1080,poj1159)

3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)

六.数学

(1)组合数学:

1.加法原理和乘法原理.

2.排列组合.

3.递推关系.

(POJ3252,poj1850,poj1019,poj1942)

(2)数论.

1.素数与整除问题

2.进制位.

3.同余模运算.

(poj2635, poj3292,poj1845,poj2115)

(3)计算方法.

1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122)

七.计算几何学.

(1)几何公式.

(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等).

(poj2031,poj1039)

(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)

(poj1408,poj1584)

(4)凸包. (poj2187,poj1113)

中级:

一.基本算法:

(1)C++的标准模版库的应用. (poj3096,poj3007)

(2)较为复杂的模拟题的训练

(poj3393,poj1472,poj3371,poj1027,poj2706)

二.图算法:

(1)差分约束系统的建立和求解. (poj1201,poj2983)

(2)最小费用最大流(poj2516,poj2516,poj2195)

(3)双连通分量(poj2942)

(4)强连通分支及其缩点.(poj2186)

(5)图的割边和割点(poj3352)

(6)最小割模型、网络流规约(poj3308, )

三.数据结构.

(1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750)

(2)静态二叉检索树. (poj2482,poj2352)

(3)树状树组(poj1195,poj3321)

(4)RMQ. (poj3264,poj3368)

(5)并查集的高级应用. (poj1703,2492)

(6)KMP算法. (poj1961,poj2406)

四.搜索

(1)最优化剪枝和可行性剪枝

(2)搜索的技巧和优化 (poj3411,poj1724)

(3)记忆化搜索(poj3373,poj1691)

五.动态规划

(1)较为复杂的动态规划(如动态规划解特别的施行商问题等)

(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)

(2)记录状态的动态规划. (POJ3254,poj2411,poj1185)

(3)树型动态规划(poj2057,poj1947,poj2486,poj3140)

六.数学

(1)组合数学:

1.容斥原理.

2.抽屉原理.

3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026).

4.递推关系和母函数.

(2)数学.

1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)

2.概率问题. (poj3071,poj3440)

3.GCD、扩展的欧几里德(中国剩余定理) (poj3101)

(3)计算方法.

1.0/1分数规划. (poj2976)

2.三分法求解单峰(单谷)的极值.

3.矩阵法(poj3150,poj3422,poj3070)

4.迭代逼近(poj3301)

(4)随机化算法(poj3318,poj2454)

(5)杂题.

(poj1870,poj3296,poj3286,poj1095)

七.计算几何学.

(1)坐标离散化.

(2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使

用).

(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)

(3)多边形的内核(半平面交)(poj3130,poj3335)

(4)几何工具的综合应

用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)

高级:

一.基本算法要求:

(1)代码快速写成,精简但不失风格

(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)

(2)保证正确性和高效性. poj3434

二.图算法:

(1)度限制最小生成树和第K最短路. (poj1639)

(2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解)

(poj3155,

poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446

(3)最优比率生成树. (poj2728)

(4)最小树形图(poj3164)

(5)次小生成树.

(6)无向图、有向图的最小环

三.数据结构.

(1)trie图的建立和应用. (poj2778)

(2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和在线算法

(RMQ+dfs)).(poj1330)

(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的

目的). (poj2823)

(4)左偏树(可合并堆).

(5)后缀树(非常有用的数据结构,也是赛区考题的热点).

(poj3415,poj3294)

四.搜索

(1)较麻烦的搜索题目训练

(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)

(2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法.

(poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)

(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法.

(poj3131,poj2870,poj2286)

五.动态规划

(1)需要用数据结构优化的动态规划.

(poj2754,poj3378,poj3017)

(2)四边形不等式理论.

(3)较难的状态DP(poj3133)

六.数学

(1)组合数学.

1.MoBius反演(poj2888,poj2154)

2.偏序关系理论.

(2)博奕论.

1.极大极小过程(poj3317,poj1085)

2.Nim问题.

七.计算几何学.

(1)半平面求交(poj3384,poj2540)

(2)可视图的建立(poj2966)

(3)点集最小圆覆盖.

(4)对踵点(poj2079)

八.综合题.

(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj214 8,poj1263)

--------------------------------------------------------------------

以及补充

Dp状态设计与方程总结

1.不完全状态记录

<1>青蛙过河问题

<2>利用区间dp

2.背包类问题

<1> 0-1背包,经典问题

<2>无限背包,经典问题

<3>判定性背包问题

<4>带附属关系的背包问题

<5> + -1背包问题

<6>双背包求最优值

<7>构造三角形问题

<8>带上下界限制的背包问题(012背包)

3.线性的动态规划问题

<1>积木游戏问题

<2>决斗(判定性问题)

<3>圆的最大多边形问题

<4>统计单词个数问题

<5>棋盘分割

<6>日程安排问题

<7>最小逼近问题(求出两数之比最接近某数/两数之和等于某数等等)

<8>方块消除游戏(某区间可以连续消去求最大效益)

<9>资源分配问题

<10>数字三角形问题

<11>漂亮的打印

<12>邮局问题与构造答案

<13>最高积木问题

<14>两段连续和最大

<15>2次幂和问题

<16>N个数的最大M段子段和

<17>交叉最大数问题

4.判定性问题的dp(如判定整除、判定可达性等)

<1>模K问题的dp

<2>特殊的模K问题,求最大(最小)模K的数

<3>变换数问题

5.单调性优化的动态规划

<1>1-SUM问题

<2>2-SUM问题

<3>序列划分问题(单调队列优化)

6.剖分问题(多边形剖分/石子合并/圆的剖分/乘积最大)

<1>凸多边形的三角剖分问题

<2>乘积最大问题

<3>多边形游戏(多边形边上是操作符,顶点有权值)

<4>石子合并(N^3/N^2/NLogN各种优化)

7.贪心的动态规划

<1>最优装载问题

<2>部分背包问题

<3>乘船问题

<4>贪心策略

<5>双机调度问题Johnson算法

8.状态dp

<1>牛仔射击问题(博弈类)

<2>哈密顿路径的状态dp

<3>两支点天平平衡问题

<4>一个有向图的最接近二部图

9.树型dp

<1>完美服务器问题(每个节点有3种状态)

<2>小胖守皇宫问题

<3>网络收费问题

<4>树中漫游问题

<5>树上的博弈

<6>树的最大独立集问题

<7>树的最大平衡值问题

<8>构造树的最小环

枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解。

采用枚举算法解题的基本思路:

(1)确定枚举对象、枚举范围和判定条件;

(2)一一枚举可能的解,验证是否是问题的解

下面我们就从枚举算法的的优化、枚举对象的选择以及判定条件的确定,这三个方面来探讨如何用枚举法解题。

例1:百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡?

算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。

下面是解这个百鸡问题的程序

var x,y,z:integer;

begin

for x:=0 to 100 do

for y:=0 to 100 do

for z:=0 to 100 do{枚举所有可能的解}

if (x+y+z=100)and(x*3+y*2+z div 3=100)and(z mod 3=0)then writeln('x=',x,'y=',y,'z=',z); {验证可能的解,并输出符合题目要求的解} end.

上面的条件还有优化的空间,三种鸡的和是固定的,我们只要枚举二种鸡(x,y),第三种鸡就可以根据约束条件求得(z=100-x-y),这样就缩小了枚举范围,请看下面的程序:

var x,y,z:integer;

begin

for x:=0 to 100 do

for y:=0 to 100-x do

begin

z:=100-x-y;

if (x*3+y*2+z div 3=100)and(z mod 3=0)then

writeln('x=',x,'y=',y,'z=',z);

end;

end.

未经优化的程序循环了1013次,时间复杂度为O(n3);优化后的程序只循环了(102*101/2)次,时间复杂度为O(n2)。从上面的对比可以看出,对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向。

在枚举算法中,枚举对象的选择也是非常重要的,它直接影响着算法的时间复杂度,选择适当的枚举对象可以获得更高的效率。如下例:

例2、将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数.

例如:三个三位数192,384,576满足以上条件.(NOIP1998pj)

算法分析:这是1998年全国分区联赛普及组试题(简称NOIP1998pj,以下同)。此题数据规模不大,可以进行枚举,如果我们不加思地以每一个数位为枚举对象,一位一位地去枚举:

for a:=1 to 9 do

for b:=1 to 9 do

………

for i:=1 to 9 do

这样下去,枚举次数就有99次,如果我们分别设三个数为x,2x,3x,以x 为枚举对象,穷举的范围就减少为93,在细节上再进一步优化,枚举范围就更少了。程序如下:

var

t,x:integer;

s,st:string;

c:char;

begin

for x:=123 to 321 do{枚举所有可能的解}

begin

t:=0;

str(x,st);{把整数x转化为字符串,存放在st中}

str(x*2,s); st:=st+s;

str(x*3,s); st:=st+s;

for c:='1' to '9' do{枚举9个字符,判断是否都在st中}

if pos(c,st)<>0 then inc(t) else break;{如果不在st中,则退出循环}

if t=9 then writeln(x,' ',x*2,' ',x*3);

end;

end.

在枚举法解题中,判定条件的确定也是很重要的,如果约束条件不对或者不全面,就穷举不出正确的结果,我们再看看下面的例子。

例3一元三次方程求解(noip2001tg)

问题描述有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。

要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

提示:记方程f(x)=0,若存在2个数x1和x2,且x1

样例

输入:1 -5 -4 20

输出:-2.00 2.00 5.00

算法分析:由题目的提示很符合二分法求解的原理,所以此题可以用二分法。用二分法解题相对于枚举法来说很要复杂很多。此题是否能用枚举法求解呢?再分析一下题目,根的范围在-100到100之间,结果只要保留两位小数,我们不妨将根的值域扩大100倍(-10000<=x<=10000),再以根为枚举对象,枚举范围是-10000到10000,用原方程式进行一一验证,找出方程的解。

有的同学在比赛中是这样做

var

k:integer;

a,b,c,d,x :real;

begin

read(a,b,c,d);

for k:=-10000 to 10000 do

begin

x:=k/100;

if a*x*x*x+b*x*x+c*x+d=0 then write(x:0:2,' ');

end;

end.

用这种方法,很快就可以把程序编出来,再将样例数据代入测试也是对的,等成绩下来才发现这题没有全对,只得了一半的分。

这种解法为什么是错的呢?错在哪里?前面的分析好象也没错啊,难道这题不能用枚举法做吗?看到这里大家可能有点迷惑了。

在上面的解法中,枚举范围和枚举对象都没有错,而是在验证枚举结果时,判定条件用错了。因为要保留二位小数,所以求出来的解不一定是方程的精确根,

再代入ax3+bx2+cx+d中,所得的结果也就不一定等于0,因此用原方程

ax3+bx2+cx+d=0作为判断条件是不准确的。

我们换一个角度来思考问题,设f(x)=ax3+bx2+cx+d,若x为方程的根,则根据提示可知,必有f(x-0.005)*(x+0.005)<0,如果我们以此为枚举判定条件,问题就逆刃而解。另外,如果f(x-0.005)=0,哪么就说明x-0.005是方程的根,这时根据四舍5入,方程的根也为x。所以我们用(f(x-0.005)*f(x+0.005)<0) 和(f(x-0.005)=0)作为判定条件。为了程序设计的方便,我们设计一个函数f(x)计算ax3+bx2+cx+d的值,程序如下:

{$N+}

var

k:integer;

a,b,c,d,x:extended;

function f(x:extended):extended; {计算ax3+bx2+cx+d的值}

begin

f:=((a*x+b)*x+c)*x+d;

end;

begin

read(a,b,c,d);

for k:=-10000 to 10000 do

begin

x:=k/100;

if (f(x-0.005)*f(x+0.005)<0) or (f(x-0.005)=0) then write(x:0:2,' '); {若x两端的函数值异号或x-0.005刚好是方程的根,则确定x为方程的根}

end;

end.

用枚举法解题的最大的缺点是运算量比较大,解题效率不高,如果枚举范围太大(一般以不超过两百万次为限),在时间上就难以承受。但枚举算法的思路简单,程序编写和调试方便,比赛时也容易想到,在竞赛中,时间是有限的,我们竞赛的最终目标就是求出问题解,因此,如果题目的规模不是很大,在规定的时间与空间限制内能够求出解,那么我们最好是采用枚举法,而不需太在意是否还有更快的算法,这样可以使你有更多的时间去解答其他难题。

数值计算方法试题及答案

【 数值计算方法试题一 一、 填空题(每空1分,共17分) 1、如果用二分法求方程043=-+x x 在区间]2,1[内的根精确到三位小数,需对分( )次。 2、迭代格式)2(2 1-+=+k k k x x x α局部收敛的充分条件是α取值在( )。 3、已知?????≤≤+-+-+-≤≤=31)1()1()1(211 0)(2 33x c x b x a x x x x S 是三次样条函数, 则 a =( ), b =( ), c =( )。 4、)(,),(),(10x l x l x l n 是以整数点n x x x ,,,10 为节点的Lagrange 插值基函数,则 ∑== n k k x l 0)(( ), ∑== n k k j k x l x 0 )(( ),当2≥n 时 = ++∑=)()3(20 4x l x x k k n k k ( )。 ; 5、设1326)(2 47+++=x x x x f 和节点,,2,1,0,2/ ==k k x k 则=],,,[10n x x x f 和=?07 f 。 6、5个节点的牛顿-柯特斯求积公式的代数精度为 ,5个节点的求积公式最高代数精度为 。 7、{}∞ =0)(k k x ?是区间]1,0[上权函数x x =)(ρ的最高项系数为1的正交多项式族,其中1)(0=x ?,则?= 1 4)(dx x x ? 。 8、给定方程组?? ?=+-=-2211 21b x ax b ax x ,a 为实数,当a 满足 ,且20<<ω时,SOR 迭代法收敛。 9、解初值问题 00 (,)()y f x y y x y '=?? =?的改进欧拉法 ??? ??++=+=++++)],(),([2),(] 0[111] 0[1n n n n n n n n n n y x f y x f h y y y x hf y y 是 阶方法。

C语言经典算法100例题目

看懂一个程序,分三步:1、流程;2、每个语句的功能;3、试数; 小程序:1、尝试编程去解决他;2、看答案;3、修改程序,不同的输出结果; 4、照答案去敲; 5、调试错误; 6、不看答案,自己把答案敲出来; 7、实在不会就背会。。。。。周而复始,反复的敲。。。。。 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? ============================================================== 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?============================================================== 【程序4】 题目:输入某年某月某日,判断这一天是这一年的第几天? ============================================================== 【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 ============================================================== 【程序6】 题目:用*号输出字母C的图案。 ============================================================== 【程序7】 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! ============================================================== 【程序8】 题目:输出9*9口诀。 ============================================================== 【程序9】 题目:要求输出国际象棋棋盘。 ============================================================== 【程序10】 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 -------------------------------------------------------------------------------- 【程序11】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? ==============================================================

ACM经典算法及配套练习题

POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,p oj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3259,poj1062,poj2253,poj1125,poj2240) (3)最小生成树算法(prim,kruskal) (poj1789,poj2485,poj1258,poj3026) (4)拓扑排序(poj1094) (5)二分图的最大匹配(匈牙利算法) (poj3041,poj3020) (6)最大流的增广路算法(KM算法). (poj1459,poj3436) 三.数据结构. (1)串(poj1035,poj3080,poj1936) (2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299) (3)简单并查集的应用. (4)哈希表和二分查找等高效查找法(数的Hash,串的Hash) (poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503) (5)哈夫曼树(poj3253) (6)堆 (7)trie树(静态建树、动态建树) (poj2513) 四.简单搜索 (1)深度优先搜索(poj2488,poj3083,poj3009,poj1321,poj2251) (2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414) (3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129) 五.动态规划 (1)背包问题. (poj1837,poj1276) (2)型如下表的简单DP(可参考lrj的书page149): 1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533) 2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列) (poj3176,poj1080,poj1159) 3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题) 六.数学 (1)组合数学:

数据结构(C语言)【经典题库】含标准答案

《数据结构与算法》复习题 选择题 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构 B.数据结构 C.数据的逻辑结构 D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑 B.存储 C.逻辑和存储 D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法 B.数据元素的类型 C.数据元素之间的关系 D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何 B.结点个数的多少 C.对数据有哪些运算 D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位

C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进 C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是 O(n2) 。 s =0; for( I =0; i

数值计算方法试题和答案解析

数值计算方法试题一 一、填空题(每空1分,共17分) 1、如果用二分法求方程在区间内的根精确到三位小数,需对分()次。 2、迭代格式局部收敛的充分条件是取值在()。 3、已知是三次样条函数,则 =( ),=(),=()。 4、是以整数点为节点的Lagrange插值基函数,则 ( ),( ),当时( )。 5、设和节点则 和。 6、5个节点的牛顿-柯特斯求积公式的代数精度为,5个节点的求积公式最高代数精度为。 7、是区间上权函数的最高项系数为1的正交多项式族,其中,则。 8、给定方程组,为实数,当满足,且时,SOR迭代法收敛。 9、解初值问题的改进欧拉法是 阶方法。 10、设,当()时,必有分解式,其中为下三角阵,当其对角线元素满足()条件时,这种分解是唯一的。 二、二、选择题(每题2分) 1、解方程组的简单迭代格式收敛的充要条件是()。(1), (2) , (3) , (4) 2、在牛顿-柯特斯求积公式:中,当系数是负值时,公式的稳定性不能保证,所以实际应用中,当()时的牛顿-柯特斯求积公式不使用。 (1),(2),(3),(4), (1)二次;(2)三次;(3)四次;(4)五次 4、若用二阶中点公式求解初值问题,试问为保证该公式绝对稳定,步长的取值范围为()。 (1), (2), (3), (4)

三、1、 2、(15 (1)(1) 试用余项估计其误差。 (2)用的复化梯形公式(或复化 Simpson公式)计算出该积分的近似值。 四、1、(15分)方程在附近有根,把方程写成三种不同的等价形式(1)对应迭代格式;(2)对应迭代格式;(3)对应迭代格式。判断迭代格式在的收敛性,选一种收敛格式计算附近的根,精确到小数点后第三位。选一种迭代格式建立Steffensen迭代法,并进行计算与前一种结果比较,说明是否有加速效果。 2、(8分)已知方程组,其中 , (1)(1)列出Jacobi迭代法和Gauss-Seidel迭代法的分量形式。 (2)(2)求出Jacobi迭代矩阵的谱半径,写出SOR 迭代法。 五、1、(15分)取步长,求解初值问题用改进的欧拉法求的值;用经典的四阶龙格—库塔法求的值。 2、(8分)求一次数不高于4次的多项式使它满足 ,,,, 六、(下列2题任选一题,4分) 1、1、数值积分公式形如 (1)(1)试确定参数使公式代数精度尽量高;(2)设,推导余项公式,并估计误差。 2、2、用二步法 求解常微分方程的初值问题时,如何选择参数使方法阶数尽可能高,并求局部截断误差主项,此时该方法是几阶的。 数值计算方法试题二 一、判断题:(共16分,每小题2分) 1、若是阶非奇异阵,则必存在单位下三角阵和上三角阵,使唯一成立。()

各算法经典例题

矩阵快速幂 hrbust1140 数字和问题 Description 定义一种操作为:已知一个数字,对其各位数字 反复求和,直到剩下的数是一位数不能求和为止。 例如:数字2345,第一次求和得到2 + 3 + 4 + 5 = 14,再对14的各位数字求和得到1 + 4 = 5,得到5将不再求和。 现在请你求出对a^b进行该操作后,求最终得到的数字. Input 第一行,包含两个数字a(0 <= a <= 2000000000)和b(1 <= b <= 2000000000) Output 输出对a^b进行操作后得到的数字是什么 #include #include #include #include #include #include using namespace std; int sum(int x) { return ((x+8)%9+1); } int g(int a,int k) { if(k==0) return 1; if(k==1) return a%9; if(k%2==0) return (g((a%9)*(a%9),k/2)%9); if(k%2==1) return (a%9)*(g((a%9),k-1)%9); } int main() { int a,k; while(scanf("%d%d",&a,&k)!=EOF) { if(a==0)printf("0\n"); else printf("%d\n",sum(g(a,k))); } }

C语言经典算法题目及答案

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03;

经典算法类笔试或面试题及答案

常见算法笔试或面试题 1、Is it a loop ? (判断链表是否有环?) Assume that we have a head pointer to a link-list. Also assume that we know the list is single-linked. Can you come up an algorithm to check whether this link list includes a loop by using O(n) time and O(1) space where n is the length of the list? Furthermore, can you do so with O(n) time and only one register? 方法:使用两个指针,从头开始,一个一次前进一个节点,一个前进2个节点,则最多2N,后两个指针可以重合;如果无环,则正常停止。同样的,可以找到链表的中间节点。同上。 2、设计一个复杂度为n的算法找到链表倒数第m个元素。最后一个元素假定是倒数第0个。 提示:双指针查找 3、用最简单的方法判断一个LONG整形的数A是2^n(2的n次方) 提示:x&(x-1) 4、两个烧杯,一个放糖一个放盐,用勺子舀一勺糖到盐,搅拌均匀,然后舀一勺混合物会放糖的烧杯,问你两个烧杯哪个杂质多? 提示:相同。假设杂质不等,那么将杂质放回原杯中,则杯中物体重量必变化,不合理。 5、给你a、b两个文件,各存放50亿条url,每条url各占用64字节,内存限制是4G,让你找出a、b文件共同的url。 方法一:使用hash表。使用a中元素创建hash表,hash控制在适当规模。在hash中查找b的元素,找不到的url先存在新文件中,下次查找。如果找到,则将相应的hash表项删除,当hash表项少于某个阈值时,将a中新元素重新hash。再次循环。 方法二:对于hash表项增加一项记录属于的文件a,b。只要不存在的表项即放入hash表中,一致的项则删除。注意:可能存在很多重复项,引起插入,删除频繁。 6、给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单

C语言经典算法题目及答案

盛年不重来,一日难再晨。及时宜自勉,岁月不待人。 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000)

JAVA经典算法50题

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... public static void main(String[]args) { Scanner sc=new Scanner(System.in); System.out.println("请输入月数:"); int month=sc.nextInt(); int a=0,b=1,i,t; for(i=2;i<=month;i++) { t=b; b=a+b; a=t; } System.out.println("第"+month+"个月有"+b+"对兔子!"); } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public static void main(String args[]) { int i,n,flag; for(n=101;n<200;n++) { flag=0; for(i=2;i

public static void main(String[]args)throws Exception { int i,j,count=0; for(i=101;i<200;i++) { for(j=2;j<(int)(Math.sqrt(i)+1);j++) { if(i%j==0) break; } if(j>(int)Math.sqrt(i)) { System.out.println(i); count++; } } System.out.println("201到200之间共有"+count+"个素数!"); } 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。public static void main(String args[]) { int a,b,c; int n; for(n=100;n<1000;n++) { a=n/100; b=(n-a*100)/10; c=n%10; if(n==a*a*a+b*b*b+c*c*c) { System.out.println(n); } } } 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

java经典算法50题答案

1 package work; public class Fib { public static void main(String[] args){ int[] fib = new int[23]; fib[0] = 1; fib[1] = 1; for(int i = 2; i < fib.length; i++){ fib[i] = fib[i - 1] + fib[i - 2]; } for(int i = 0; i < fib.length; i++){ System.out.print(fib[i]+" "); } } } 2 package work; import java.math.*; import java.util.ArrayList; public class Sushu { public static void main(String[] args){ ArrayList list = new ArrayList(); for(int i = 101; i < 200; i++){ if(isPrime(i)){ list.add(i); } } System.out.println(list + "共有" +list.size()); } public static boolean isPrime(int i){ boolean flag = true; for(int j = 2; j < Math.sqrt(i); j++){ if(i % j == 0){ flag = false; } } return flag; } } 3

package work; public class Flower { public static void main(String[] args){ for(int i = 100; i <999; i++){ if(flower(i)){ System.out.print(i +" "); } } } public static boolean flower(int number){ boolean flag = false; int i = number / 100; // int j = (number - i*100) / 10; int k = number % 10; if((i*i*i + j*j*j + k*k*k) == number){ flag = true; } return flag; } } 4 package work; import java.util.Scanner; import java.io.*; public class Decomposition { private static int k = 2; public static void main(String[] args)throws IOException{ Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数"); int number = scanner.nextInt(); System.out.print(number + "="); fenJie(number); } public static void fenJie(int number){ if(k == number){ System.out.print(k); return; }

数值计算方法试题及答案

数值计算方法试题一 一、 填空题(每空1分,共17分) 1、如果用二分法求方程043=-+x x 在区间]2,1[内的根精确到三位小数,需对分( )次。 2、迭代格式 ) 2(2 1-+=+k k k x x x α局部收敛的充分条件是α取值在 ( )。 3、已知?????≤≤+-+-+-≤≤=31)1()1()1(2110)(2 33x c x b x a x x x x S 是三次样条函数, 则 a =( ), b =( ), c =( )。 4、)(,),(),(10x l x l x l n Λ是以整数点n x x x ,,,10Λ为节点的Lagrange 插值基函数,则 ∑== n k k x l 0)(( ), ∑== n k k j k x l x 0 )(( ),当2≥n 时 = ++∑=)()3(20 4 x l x x k k n k k ( )。 5、设 1326)(247+++=x x x x f 和节点,,2,1,0,2/Λ==k k x k 则=],,,[10n x x x f Λ 和=?07f 。 6、5个节点的牛顿-柯特斯求积公式的代数精度为 ,5个节点的求积公式最高代数精度为 。 7、{}∞=0)(k k x ?是区间]1,0[上权函数x x =)(ρ的最高项系数为1的正交多项式族,其中1)(0=x ?,则?= 1 4)(dx x x ? 。

8、给定方程组?? ?=+-=-221121b x ax b ax x ,a 为实数,当a 满足 ,且 20<<ω时,SOR 迭代法收敛。 9、解初值问题00 (,)()y f x y y x y '=?? =?的改进欧拉法 ??? ??++=+=++++)],(),([2),(] 0[111] 0[1n n n n n n n n n n y x f y x f h y y y x hf y y 是 阶方法。 10、设 ?? ??? ?????=11001a a a a A ,当∈a ( )时,必有分解式T LL A =,其中L 为下三角阵,当其对角线元素)3,2,1(=i l ii 满足( )条件时,这种分解是唯一的。 二、 二、选择题(每题2分) 1、解方程组b Ax =的简单迭代格式g Bx x k k +=+)() 1(收敛的充要条件是 ( )。 (1)1)(A ρ, (4) 1)(>B ρ 2、在牛顿-柯特斯求积公式: ?∑=-≈b a n i i n i x f C a b dx x f 0 )() ()()(中,当系数 ) (n i C 是负值时,公式的稳定性不能保证,所以实际应用中,当( )时的牛顿-柯特斯求积公式不使用。 (1)8≥n , (2)7≥n , (3)10≥n , (4)6≥n , 3、有下列数表

基本算法语句与算法案例练习题(习题经典,有详细解答)

基本算法语句与算法案例练习题 1.我国古代数学发展一直处于世界领先水平,特别是宋、元时期的“算法”,其中可以同欧几里得 辗转相除法相媲美的是( ) A 、中国剩余定理 B 、更相减损术 C 、割圆术 D 、秦九韶算法 2.计算机执行右面的程序段后,输出的结果是( ) A 、1,3 B 、4,1 C 、0,0 D 、6,0 3. 840和1764的最大公约数是( ) A .84 B .12 C .168 D .252 4.阅读下列程序,并指出当a=3,b=﹣5时的计算结果( ) A .a=-1,b=4 B .a=0.5,b=﹣1.25 C .a=3,b=﹣5 D .a=-0.5,b=1.25 5.执行下列程序后,输出的值是( ) A .17 B .19 C .21 D .23 6.把89化成五进制的末尾数是 ( ) A .1 B .2 C .3 D .4 7.用“辗转相除”求得459法和357的最大公约数是( ) A .3 B .9 C .17 D .51 8.一个K 进制的三位数与某六进制的二位数等值,则K 不可能是( ) A.3 B.4 C.5 D.7 INPUT a,b a=a+b b=a ﹣b a=(a+b)/2 b=(a ﹣b)/2 PRINT a,b END

9.当输入x=-1,y=20时,图中程序运行后输出的结果为( ) A .3; 43 B. 43; 3 C.-18 ;16 D.16 ; -18 10.若运行如下程序,最后输出y 的值为-20,那么应该输入x 的值为 ( ) A.10或-6 B. 10或-2 C.-6 D. 10或-6或-2 11.读右面的程序, 该程序表示的函数是_________________ 12. 13.如图是求11 1 123100++++的算法的程序框图。 (1)标号①处填 。标号②处填 。 (2)根据框图用“当”型语句编写程序。

JAVA经典算法面试10题及答案

JAVA经典算法面试10题及答案 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21 . public class exp2{ public static void main(string args[]){ int i=0; for(i=1;i i++) system.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); }}或public class exp2{ public static void main(string args[]){ int i=0; math mymath = new math(); for(i=1;i i++) system.out.println(mymath.f(i)); }}class math{ public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); }}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 public class exp2{ public static void main(string args[]){ int i=0; math mymath = new math(); for(i=2;i =200;i++) if(mymath.iszhishu(i)==true) system.out.println(i); }}class math{ public int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); } public boolean iszhishu(int x) { for(int i=2;i =x/2;i++) if (x % 2==0 ) return false; return true; }}【程序3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其

经典算法面试题及答案

1. 时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/(1-1/12)=720/11 每隔720/11分才重合一次(而并不是每小时重合一次) 1440里有22个720/11,如果说算上0点和24点,那也是重合23次而已,但我觉得0点应该算到前一天的24点头上,所以每一天循环下来重合22次啊 2. 找出字符串的最长不重复子串,输出长度 建一个256个单元的数组,每一个单元代表一个字符,数组中保存上次该字符上次出现的位置; 依次读入字符串,同时维护数组的值; 如果遇到冲突了,就返回冲突字符中保存的位置,继续第二步。也可以用hashmap 保存已经出现的字符和字符的位置 3. 说是有一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出 现的前十个词。 先用哈希,统计每个词出现的次数,然后在用在N个数中找出前K大个数的方法找出出现

次数最多的前10个词。 4. 如题3,但是车次文件特别大,没有办法一次读入存。 1) 直接排序,写文件时,同时写入字符串及其出现 次数。 2) 可以用哈希,比如先根据字符串的第一个字符将字符串换分为多个区域,每个区域的字符串写到一个文件,然后再用哈希+堆统计每个区域前10个频率最高的字符串,最后求出所有字符串中前10个频率最高的字符串。 5. 有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大,输出这个乘积m。例如:n=12 (1)分解为1+1+1+…+1,12个1, m=1*1*1……*1=1 (2)分解为2+2+…+2,6个2, m=64 (3)分解为3+3+3+3,4个3, m=81 (4)大于等于4时分解时只能分解为2和3,且2最多两个 f(n) = 3*f(n-3) n>4 f(4) = 2*2 f(3) = 3 f(2) = 2分解为4+4+4,3个4, m=64 6. 求数组n中出现次数超过一半的数

算法与程序设计经典例题

第一节选择题 选择题是一种各学科均使用的常见题型,它的结构由指令性语言、题干和选择支三个部分组成。 指令性语言:通常在大题号后面,本大题所有小题的前面,用括号括起来的部分;一般有三个方面的 内容:一是本大题包含的小题数目、每小题的分值和本大题的总分;二是指明每个小题中正确答案的数量; 三是每小题的计分方法。 题干:是指每一小题中叙述考查内容的不完整(加上某个选择支就能完整)的句子。 选择支:是题干后面的备选答案。 在信息技术会考试题中均采用“四选一”型的单项选择题,即一道选择题的四个选择支中,有且只有 一个正确选项。 选择题形式多样,结构灵活,可考查知识的覆盖面广,能比较全面地考察考生的基本知识和基本操作 技能,而且选择题答案具有确定性,阅卷方便,考试信度和效度高等特点,但选择题只在限定的备选项中 选出正确选项,其考核功能有一定的局限性,对考生的创新能力的培养有不同程度的影响。 选择题的解法很多,主要可以从直接法和间接法两方面着手。 一、直接法 直接法是指运用所学知识或根据操作经验,直接从题干出发,经过回忆、计算、比较,得出结论后与 备选答案进行对照,选出正确的选项。 【例1】以下主要用于制作网页的软件是 (A)Excel(B)Linux(C)FrontPage(D)PowerPoint (浙江省2006年会考试题)分析目前每一位考生所使用的网页制作软件不多,绝大部分都在使用(C)。 【例2】下列主要用来输入音频信息的设备是 (A)键盘(B)显示器(C)话筒(D)扫描仪 (A)销售盗版软件(B)下载免费软件(C)购买正版软件(D)发布共享软件 (浙江省2002年会考试题)分析本题可以根据计算机使用道德及计算机软件保护条例等知识直接得到答案:(A)。 【例6】有如下Visual Basic程序段: If x>0 Then y=2 End If 它的控制结构属于 (A)循环结构(B)树型结构(C)分支结构(D)顺序结构 (浙江省2004年会考试题)分析作为信息技术基础的内容,要求能看懂程序的基本控制结构及简单程序的阅读理解,如果在简 单程序中有If … then …语句,则此种控制结构一定是分支结构。本题答案为(C)。 【例7】下列说法中正确的是 (A)图像通常有位图和点阵图两种表示形式 (B)用Windows系统中的“画图”程序画出来的图形就是矢量图 (C)矢量图经过移动、缩放、旋转和扭曲等变换后清晰度不会发生变化 (D)图像文件中只记录生成图的算法和图上的某些特征点,数据量较小 分析本题可以根据图像与图形、位图与矢量图等基本概念直接得到答案(C) 【例8】一位同学用数码相机拍了一些照片,他想对这些照片上的人物和背景进行重新组合,以获得 最佳效果,你可以建议他采用的软件是 (A)Flash(B)Photoshop(C)画图程序(D)Powerpoint

经典算法练习题

1SHAOLIN N个数,第一个是1000000000,后面的数都小于这个数。每次添加一个数时,找到与该数差最小的。 查找问题,用map或set即可。 Map.find或set.find,复杂度O(logN)。 然后iter++和iter—得到相邻点 Iterator只支持++,--操作。可能得多定义几个变量 Set,直接*iter得到值 Map,iter->first得到key,iter->second得到value 2丑数 一个数,如果其因数只有2、3、5、7,则称该数为丑数。 第一个丑数是1 给定一个整数N,N<10000,求第n小的丑数 3有序表第k小和 A、B均为升序数组 求任意组合a[i]+b[j]中值为第k小的值,并求对应i,j(若有并列输出i最小的,再相等输出j最小的) 4线段树1 有一个数组,每次可以执行 1将数列中的某个数加上某个数 2询问一个区间的和 操作个数Q<=100000,数组长度n<=100000 5线段树2 例题:有一个数组,每次可以执行 1将数列中的某个区间加上某个数 2询问一个区间的和 6线段树3 例题:有一个数组,每次可以执行 1将数列中的某个区间加上某个数 2将数列中的某个区间全部修改为某个数 3询问一个区间的和 线段树多类信息的维护

7线段树4 例题:有一个数组,每次可以执行 1将数列中的某个区间加上某个数 2将数列中的某个区间乘以某个数 3将数列中的某个区间改成某个数 4查询区间和,平方和,立方和 8树状数组例题 给定一个n*n的矩阵,其中元素为0或1.初始A[i][[j]=0 现给定两种操作 操作1给定两对数据x1,y1,x2,y2,将左上角为x1,y1,右下角为x2,y2的矩形中的所有元素进行not运算。C x1 y1 x2 y2 操作2为查询一个坐标内的值。Q x y N<=1000,T<=50000,T表示操作个数 9GROUP多校4 给定n个数分别为1~n(无序),给定一个区间[L,R],求区间内的数可以分成多少个组,要求组间的数是连续的。 10比赛 有n个人进行比赛,每个人有一个能力值。 N个人排成一列。分别为a1~an,仅满足 i=a[k]才可以进行比赛。 求一共可以进行的比赛次数。 N<=10000。A[i]<=1000000 11最大抑或值 有n个数,给定一个数,求在这n个数里与该数抑或最大的数(int) N<=1000000000 12营业额 公司在营业时不希望营业额出现太大波动。否则说明经营状况出现问题。 最小波动=min(abs(该天营业额-之前某天营业额)) 现在需要计算每天的最小波动之和。 天数N<5W,Ai<=100W,数据保证最终结果在long long

相关主题
文本预览
相关文档 最新文档