NoiP2003提高组复赛试题分析

合集下载

NOIP普及组历届试题分析

NOIP普及组历届试题分析

对于100%的数据,3 ≤ n ≤ 100 测验题给出的正整数大小不超过10,000。
试题分析

题意大意:给你n个数,在这n个数中,找 到满足A+B=C的C的个数,注意不是这个 等式的个数。
样例中,1,2,3,4有1+2=3,1+3=4两个。

由于本题数据规模n<=100,我们可以直接
枚举C, A, B,三层循环解决问题。
扫雷游戏 (noip2015普及组第二题)
输入样例 1 33 *?? ??? ?*? 输入样例 2 23 ?*? *??
输出样例 1 mine.out *10 221 1*1 输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
问题分析:
本题也是简单的枚举类试题。 我们从雷区的第一行第一列(1,1)开始,判断它周围 有多少个地雷。 由于本题读入的是字符,读入时需要注意: readln(n,m); for i=1 to n do begin for j=1 to m do read(a[i][j]); readln; end;
比例简化 (noip2014普及组第二题)



在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。 不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。 现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。

NOIP提高组复赛题目

NOIP提高组复赛题目

第一题题库NOIP20071.统计数字(count.pas/c/cpp)【问题描述】某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。

已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

【输入】输入文件count.in包含n+1行:第1行是整数n,表示自然数的个数。

第2~n+1行每行一个自然数。

【输出】输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。

每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

【输入输出样例】【限制】40%的数据满足:1<=n <=100080%的数据满足:1<=n <=50000100%的数据满足:1<=n <=200000,每个数均不超过1 500 000 000(1.5*109)NOIP20081. 笨小猴(wird.pas/c/cpp)【问题描述】笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。

但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn 是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果maxn-minn 是一个质数,那么笨小猴就认为这是个Lucky Word ,这样的单词很可能就是正确的答案。

【输入】输入文件word.in 只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

【输出】输出文件word.out 共两行,第一行是一个字符串,假设输入的的单词是Lucky Word ,那么输出“Lucky Word ”,否则输出“No Answer ”;第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn 的值,否则输出0。

NOIP提高组复赛题解

NOIP提高组复赛题解

样例 输入: 33 039 285 570 输出: 34 数据规模: 30%的数据满足:1<=m,n<=10 100%的数据满足:1<=m,n<=50
思路: 首先想到搜索,但是对于只考虑一条路线来说, 每一步有两种状态 一共要走m+n步,搜索整棵树的 时间复杂度为O(2^(m+n)),如果两条路线都考虑的 话,时间复杂度为O(4^(m+n)),即使是30%的数据, 即m+n=20,4^20≈10^12,这样的数据规模也还是太 大了。
4维动态规划 本题可以使用动态规划法解决。 设f[i,j,k,l]为第一条线走到(I,j),第二条线走到 (k,l)时的最优值(方便起见,两条线都看作从左上角 开始,右下角结束)。 动态转移方程: f[i-1,j,k-1,l] (i>1) f[i,j,k,l]=min f[i-1,j,k,l-1] (i>1) +s[i,j]+s[k,l] f[i,j-1,k-1,l] (j>1)且(k>i+1) f[I,j-1,k,j-1] (j>1) 同时,由于两条线不能交叉,有k>i。
输入格式: 输入文件matches.in共一行,有一个整数n(n<=24)。 * 输出格式: 输出文件matches.out共一行,表示能拼成的不同等 式的数目。
样例1 输入:
14 输出: 2 解释: 2个等式为0+1=1和1+0=1。
样例2 输入: 18 输出: 9 解释: 9个等式为: 0+4=4、0+11=11、1+10=11、2+2=4、 2+7=9、4+0=4、7+2=9、10+1=11、11+0=11

历年NOIP提高组试题难度列表

历年NOIP提高组试题难度列表
NOIP2008-C
NOIP2008-D
NOIP2009-A
NOIP2009-B
火柴棒等式 模拟
传纸条 双栈排序
动态 规划
构造
潜伏者 模拟
Hankson的 趣味题
数学
枚举,优化/开表 0.8
历届搜索
题一般都比较
多维状态DP 0.7 难,搜索算法
本身简单,于
枚举,贪心/二分 图
0.4
是题目会提高
选手对其他方
模拟
【构造】
动态 规划
构 造, 贪心
多维DP
BFS/贪心,并查 集
平均难度系 数:0.27
构造类题 目一般没有明 确的算法,需
NOIP2010-D
引水入城
搜索 BFS
要选手仔细分 析题目的实
质,并得出解法。
这个解法通常不是唯一的。有时一个好的贪心可以得相当
多的分。有时搜索剪枝可以很大的提高效率。同样以多得分为
需要掌握
模拟,字符串
质数及其性 0.8 质,基础的实
子序列DP,贪心 优化
0.2
数操作,加法 原理和乘法原
置换群,贪心 0.2 理。此类题需
字符串,抽样检 测,表达式
区间环DP
要选手对数学 0.3 规律的灵感。
【图论】 0.6 平均难度系
资源分配DP,构 造
0.6
数:0.50 历届考察
模拟
动态规划/组合 数学,高精度
金明的预算 动态
方案
规划
作业调度方 案
模拟
2^k进制数
动态 规划
统计数字 模拟
字符串的展 开
模拟
矩阵取数游 动态

规划
树网的核 图论

NOIP历年复赛提高组试题(2004-2013)

NOIP历年复赛提高组试题(2004-2013)

第十届全国信息学奥林匹克分区联赛(NOIP2004)复赛试题(提高组竞赛用时:3小时)1、津津的储蓄计划(Save.pas/dpr/c/cpp)【问题描述】津津的零花钱一直都是自己管理。

每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。

因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如11月初津津手中还有83元,妈妈给了津津300元。

津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。

到了11月月末,津津手中会剩下3元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。

有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。

如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。

如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

【输入文件】输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

【输出文件】输出文件save.out包括一行,这一行只包含一个整数。

如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

【样例输入1】29023028020030017034050908020060【样例输出1】-7【样例输入2】29023028020030017033050908020060【样例输出2】1580【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。

【精选资料】NOIP提高组复赛试题与简解转载

【精选资料】NOIP提高组复赛试题与简解转载

Day1铺地毯【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。

一共有n 张地毯,编号从1 到n。

现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。

地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。

注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

【输入】输入文件名为 carpet.in。

输入共 n+2 行。

第一行,一个整数 n,表示总共有n 张地毯。

接下来的 n 行中,第i+1 行表示编号i 的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y 轴方向的长度。

第 n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。

【输出】输出文件名为 carpet.out。

输出共 1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。

【输入输出样例 1】【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。

【输入输出样例 2】【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。

【数据范围】对于 30%的数据,有n≤2;对于 50%的数据,0≤a, b, g, k≤100;对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。

【一句话题意】给定n个按顺序覆盖的矩形,求某个点最上方的矩形编号。

【考察知识点】枚举【思路】好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。

置答案ans=-1,按顺序枚举所有矩形,如果点在矩形内则更新ans。

注意题中给出的不是对角坐标,实际上是(a,b)与(a+g,b+k)。

noip 2003 附答案

noip 2003 附答案

第九届分区联赛提高组初赛试题(提高组PASCAL 语言二小时完成)●●全部答案均要写在答案卷子上,写在试卷纸上一律无效●●一.单项选择题 (共10题,每题1.5分,共计15分。

每题有且仅有一个正确答案.)。

1. 图灵 (Alan Turing) 是 ( )。

A) 美国人 B) 英国人 C) 德国人 D) 匈牙利人 E) 法国人2. 第一个给计算机写程序的人是( )。

A) Alan Mathison Turing B) Ada Lovelace C) John von Neumann D) John Mc-Carthy E) Edsger Wybe Dijkstra3. 十进制数2003等值于二进制数( )。

A) 010******* B) 10000011 C) 110000111 D) 11111010011 E) 11110100114. 假设A=true,B=false,C=ture,D=ture,逻辑运算表达式A∧B∨C∧D的值是( )。

A) ture B) false C) 0 D) 1 E) NULL5. 一个高度为h 的二叉树最小元素数目是( )。

A) 2h+1 B) h C) 2h-1 D) 2h E) 2h-16. 已知队列(13,2,11,34,41,77,5,7,18,26,15),第一个进入队列的元素是13,则第五个出队列的元素是( )。

A) 5 B) 41 C) 77 D) 13 E) 187. 下面一段程序是用( )语言书写的。

int func1(int n){int i,sum=0;for(i=1;i<=n;i++)sum+=i*i;return sum;}A) FORTRAN B) PASCAL C) C D) PROLOG E) BASIC8. 设全集E={1,2,3,4,5},集合A={1,4},B={1,2,5},C={2,4},则集合(A ∩B)∪~C 为( )。

NOI2003试题day2

NOI2003试题day2

第二十届全国青少年信息学奥林匹克竞赛NOI2003第二试有关附加文件的信息,请参看具体的题目说明。

数据生成器【题目背景】小明在做NOI2003练习赛的《幸福的老鼠》时觉得题目太简单了,于是对原题做了一些扩展:●将原题的N从20扩展到200000。

●将原题经过一条街道需要的时间改为Ti(1 £ Ti £ 1000000000)分钟(i为街道的编号)。

●增加了一个条件:小狗家Y离老鼠家X的距离小于等于大狗家Z离老鼠家X的距离。

即使这样,他仍然很快地做了出来。

于是,小明打算做一些输入文件来测试他的程序。

现在他已经生成了一些符合题意的图,不过为了增大测试数据的难度,他希望你能帮他选取一组X、Y、Z,使老鼠拿到礼物的时间尽可能地大。

【小明扩展的题目(注意,你并不需要解决此题)】幸福的老鼠Jerry要过生日了,小狗大狗分别送了它一份生日礼物。

现在Jerry打算从自己家X出发,先到小狗家Y(因为小狗家Y离老鼠家X的距离小于等于大狗家Z离老鼠家X的距离),再到大狗家Z,将两份礼物取回。

卡通城由N(3 £ N £ 200000)个居住点和N-1条连接居住点的双向街道组成,经过第i 条街道需花费Ti(1 £ Ti £ 1000000000)分钟的时间。

可以保证,任两个居住点间都存在通路。

不妨设Jerry家在点X,小狗家在点Y,大狗家在点Z。

现在,请你计算,Jerry最快需要耗费多长时间才能拿到生日礼物?【任务描述】定义:令|AB|表示卡通城中从A点走到B点需要的最少时间。

给出卡通城的地图,找到一组X、Y、Z,使得:|XY|≤|XZ||XY|+|YZ|最大。

并求出此时|XY|+|YZ|的值。

【输入文件】输入文件jerrygen.in第一行是两个整数N(3 £ N £ 200000)和M(M=N-1),分别表示居住点总数和街道总数。

从第2行开始到第N行,每行给出一条街道的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一题:神经网络【试题分析】一、题意分析1、任务描述:从输入层开始,各节点按照传递公式,一层一层向下传递。

输出输出层中信号大于零的节点编号和信号大小。

(节点编号由小到大)如果没有满足条件的编号则输出NULL。

信号传递公式:∑∈-=Ei jijjiiUCWC),(公式中的Wji(可能为负值)表示连接j号神经元和i号神经元的边的权值。

当Ci大于0时,该神经元处于兴奋状态,否则就处于平静状态。

当神经元处于兴奋状态时,下一秒它会向其它神经元传递信号,信号的强度为Ci。

2、输入:两个整数n(1≤n≤20)和p。

n表示节点的个数;p表示有向边的条数。

下面n行表示1-n号节点的状态和阈值。

下面p行表示有向边及其权值。

3、输出:输出输出层状态大于零的神经元编号和状态,并且按照编号有小到大顺序输出!若输出层的神经元最后状态小于等于0,则输出NULL。

二、问题分析1、题目中给出每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。

所以不必进行拓扑排序,一层一层的向下传递信号即可。

输出最后一层中信号大于零的节点编号。

2、可以建立一个队列,将输入层节点入队。

3、取队首节点出队,寻找此节点有向边,如果有有向边:1)则记录此节点不是输出层;2)再判断此节点信号大于零则向下传递信号,将指向的节点入队(防止重复入队)。

再出队再传递,直至全部出队。

注意:1)输入层可以是输出层。

2)信号传递公式中只减一次U[i]。

【程序清单】Program network;ConstInName='network.in';OutName='network.out';MM=100;VarInFile,OutFile:Text;C,U:Array[1..MM] Of LongInt;Map:Array[1..MM,1..MM] Of LongInt;Flag:Array[1..MM,1..MM] Of Boolean;IsOut:Array[1..MM] Of Boolean;Queue:Array[1..MM] Of LongInt;N,P,i,Int1,Int2,Head,Rear:LongInt;IsInQueue:Array[1..MM] Of Boolean;IsNull:Boolean;BeginAssign(InFile,InName);Reset(InFile);ReadLn(InFile,N,P);For i:=1 To N Do ReadLn(InFile,C[i],U[i]); FillChar(Flag,SizeOf(Flag),False);For i:=1 To P Do BeginRead(InFile,Int1,Int2);ReadLn(InFile,Map[Int1,Int2]);Flag[Int1,Int2]:=True;End;Close(InFile);FillChar(IsOut,SizeOf(IsOut),True);FillChar(IsInQueue,SizeOf(IsInQueue),False); Head:=1; Rear:=1;For i:=1 To N Do BeginIf C[i]>0 Then BeginQueue[Rear]:=i;Inc(Rear);IsInQueue[i]:=True;EndElse C[i]:=-U[i];End;While Head<Rear Do BeginFor i:=1 To N DoIf Flag[Queue[Head],i] Then BeginIf C[Queue[Head]]>0 Then BeginInc(C[i],Map[Queue[Head],i]*C[Queue[Head]]);If Not IsInQueue[i] Then BeginQueue[Rear]:=i;Inc(Rear);IsInQueue[i]:=True;End;End;IsOut[Queue[Head]]:=False;End;Inc(Head);End;Assign(OutFile,OutName);Rewrite(OutFile);IsNull:=True;For i:=1 To N DoIf IsOut[i] ThenIf C[i]>0 Then BeginWriteLn(OutFile,i,' ',C[i]);IsNull:=False;End;If IsNull Then WriteLn(OutFile,'NULL');Close(OutFile);End.第二题:侦探推理【试题分析】一、题意分析1、任务描述:M个人参加游戏,每人提供一句或多句证言,共P句证言。

其中N个人始终说假话,其余的人始终说真话。

请你通过证言判断出谁是罪犯。

证词中出现的其它话,都不列入逻辑推理的内容。

2、输入:第一行有三个整数,M(1≤M≤20)、N(1≤N≤M)和P(1≤P≤100):M是参加游戏的明明的同学数,N是其中始终说谎的人数,P是证人的综述。

接下来M行,每行是明明的一个同学的名字(英文字母组成,没有空格,全部大写)。

往后有P行,每行开始是某个同学的名字,紧跟着一个冒号和一个空格,后面是一句证词,符合前表中所列格式,证词每行不会好过250个字符。

输入中不会出现连续的两个空格,而且每行开头和结尾也没有空格。

3、输出:如果你的程序能确定谁是罪犯,则输出他的名字;如果程序判断出不止一个人可能是罪犯,则输出Cannot Determine;如果程序判断出没有人可能成为罪犯,则输出Impossible。

二、问题分析1、根据题意可知可以利用枚举法完成。

枚举罪犯和今天是星期几。

满足N 个人始终说谎话和M-N个人始终说真话的条件,就可以确定罪犯。

2、首先利用字符串操作将证言转化成计算机可表示的信息。

1)定义Guilty:Array[1..MM,1..MM] Of Integer;{-1..1}FillChar(Guilty,SizeOf(Guilty),0) 初值为0Guilty[i,j]=-1:表示第i个人说第j个人不是罪犯Guilty[i,j]= 1:表示第i个人说第j个人是罪犯其中包含Guilty[i,i]即第i个人说自己是不是罪犯注意:Guilty不可以自相矛盾。

2)定义WhatDay:Array[1..MM,1..7] Of Boolean;FillChar(WhatDay,SizeOf(WhatDay),False)WhatDay[i,j]:=True :表示第i个人说过j是星期几3、枚举罪犯和星期几,判断每句证言是真是假,统计说真假证言的人数。

注意:有可能某人又说过真话,又说过假话。

4、根据题目要求输出罪犯编号或Cannot Determine或Impossible。

【程序清单】Program logic;ConstInName='logic.in';OutName='logic.out';MM=20;DayState:Array[1..7] Of String=('is Monday. #','is Tuesday. #','is Wednesday. #','is Thursday. #','is Friday. #','is Saturday. #','is Sunday. #');cImpossible=-1;cCannotDetermine=-2;VarInFile,OutFile:Text;M,N,P:Integer;Name:Array[1..MM] Of String;Guilty:Array[1..MM,1..MM] Of Integer;{-1..1}WhatDay:Array[1..MM,1..7] Of Boolean;i,j:Integer;IsGuilty:Array[1..MM] Of Boolean;Ans,AnsC:Integer;Procedure Print(ID:Integer);BeginAssign(OutFile,OutName);Rewrite(OutFile);If ID=cImpossible ThenWriteLn(OutFile,'Impossible')Else If ID=cCannotDetermine ThenWriteLn(OutFile,'Cannot Determine')Else WriteLn(OutFile,Name[ID]);Close(OutFile);Halt;End;Procedure SetGuilty(CurID,NextID,NewValue:Integer); BeginIf Guilty[CurID,NextID]=0 ThenGuilty[CurID,NextID]:=NewValueElse If Guilty[CurID,NextID]<>NewValue ThenPrint(cImpossible);End;Procedure ReadStatement;Vari,j,CurID,NextID:Integer;CurStr,CurName:String;BeginFor i:=1 To P Do BeginReadLn(InFile,CurStr);CurStr:=CurStr+' #';CurName:=Copy(CurStr,1,Pos(':',CurStr)-1); CurStr:=Copy(CurStr,Pos(':',CurStr)+2,255); CurID:=0;For j:=1 To M DoIf CurName=Name[j] Then BeginCurID:=j;Break;End;If CurID=0 Then Continue;If CurStr='I am guilty. #' ThenSetGuilty(CurID,CurID,1)Else If CurStr='I am not guilty. #' ThenSetGuilty(CurID,CurID,-1)Else BeginCurName:=Copy(CurStr,1,Pos(' ',CurStr)-1); CurStr:=Copy(CurStr,Pos(' ',CurStr)+1,255); If CurName='Today' Then BeginFor j:=1 To 7 DoIf CurStr=DayState[j] Then BeginWhatDay[CurID,j]:=True;Break;End;EndElse BeginNextID:=0;For j:=1 To M DoIf CurName=Name[j] Then BeginNextID:=j;Break;End;If NextID=0 Then Continue;If CurStr='is guilty. #' ThenSetGuilty(CurID,NextID,1)Else If CurStr='is not guilty. #' Then SetGuilty(CurID,NextID,-1);End;End;End;End;Function Check(CurGuilty,CurDay:Integer):Boolean;VarSayT,SayF:Array[1..MM] Of Boolean;i,j,TCount,FCount:Integer;BeginFillChar(SayT,SizeOf(SayT),False);FillChar(SayF,SizeOf(SayF),False);For i:=1 To M Do BeginIf Guilty[i,CurGuilty]=1 ThenSayT[i]:=TrueElse If Guilty[i,CurGuilty]=-1 Then SayF[i]:=True;End;For i:=1 To M DoFor j:=1 To M DoIf j<>CurGuilty Then BeginIf Guilty[i,j]=1 ThenSayF[i]:=TrueElse If Guilty[i,j]=-1 ThenSayT[i]:=True;End;For i:=1 To M DoIf WhatDay[i,CurDay] Then SayT[i]:=True; For i:=1 To M DoFor j:=1 To 7 DoIf j<>CurDay ThenIf WhatDay[i,j] Then SayF[i]:=True; For i:=1 To M DoIf SayT[i] And SayF[i] Then BeginCheck:=False;Exit;End;TCount:=0; FCount:=0;For i:=1 To M Do BeginIf SayT[i] Then Inc(TCount);If SayF[i] Then Inc(FCount);End;If (FCount>N) Or (M-TCount<N) Then Begin Check:=False;Exit;End;Check:=True;End;BeginAssign(InFile,InName);Reset(InFile);ReadLn(InFile,M,N,P);For i:=1 To M Do ReadLn(InFile,Name[i]);FillChar(Guilty,SizeOf(Guilty),0);FillChar(WhatDay,SizeOf(WhatDay),False);ReadStatement;Close(InFile);FillChar(IsGuilty,SizeOf(IsGuilty),False);For i:=1 To M DoFor j:=1 To 7 DoIsGuilty[i]:=IsGuilty[i] Or Check(i,j);AnsC:=0;For i:=1 To M DoIf IsGuilty[i] Then BeginInc(AnsC);Ans:=i;End;If AnsC=0 ThenPrint(cImpossible)Else If AnsC>1 ThenPrint(cCannotDetermine)Else Print(Ans);End.第三题:加分二叉树【试题分析】一、题意分析1、任务描述:在中序遍历为(1,2,3,…,n)的各种二叉树中,选出加分最高的一棵二叉树,输出最高加分和对此二叉树的前序遍历。

相关文档
最新文档