noip2004 提高组复赛试题及参考程序(pascal)
Pascal历届NOIP复赛试题(1)-分析
第12讲-历届NOIP复赛试题(1)模拟试题1. Cantor表(cantor.pas/c/cpp)【问题描述】现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。
他是用下面这一张表来证明这一命题的:我们以Z字形给上表的每一项编号。
第一项是1/1,然后是1/2,2/1,3/1,2/2,…【输入】整数N(1≤N≤10000000)【输出】表中的第N项【样例输入】7【样例输出】- 1 -1/4【分析】基础题,模拟。
首先确定所在斜行,然后针对奇数行和偶数行进行计算。
【参考代码】varn,x:longint ;beginassign(input,'cantor.in');reset(input);assign(output,'cantor.out');rewrite(output);readln(n);x:=0;repeat//确定所在的斜行inc(x);n:=n-x ;until n<=0;if x mod2=0then write((x+n),'/',(1-n))//确定如何输出else writeln((1-n),'/',(x+n));close(input);close(output );end.2. 回文数(huiwen.pas/c/cpp)【问题描述】若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个10进制数56,将56加56(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:STEP1:87+78 = 165 STEP2:165+561 = 726STEP3:726+627 = 1353 STEP4:1353+3531 = 4884在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=10,N=16)进制数M,求最少经过几步可以得到回文数。
NOIP2004提高组解题报告-推荐下载
Noip2004解题报告一、津津的储蓄计划算法:模拟法程序:program save1;var a:array[1..12] of longint;have,save,x,temp,i:longint;f:text;beginassign(f,'save.in');reset(f);for i:=1 to 12 do readln(f,a[i]);close(f);for i:=1 to 12 dobegintemp:=have+300-a[i];if temp<0 thenbeginx:=i;break;endelsebeginsave:=save+temp div 100*100;have:=temp mod 100;end;end;assign(f,'save.out');rewrite(f);if x<>0 then writeln(f,-x) else writeln(f,trunc(save*1.2)+have);close(f);end.二、合并果子算法:贪心+堆分析:显然,每次从现有的数中选取两个最小数的进行合并(将这两个数删除),将合并后的数记录下来,重复n-1次,就能保证值最小。
由于需要不断选取最小的数,数据结构考虑采用堆。
首先建堆,每次操作,先选取最小元素O(1),并从堆中删除最小元素O(logn),重复两次,再将合并后的数插入堆中O(logn)。
我的程序建堆采取快速排序,时间复杂度O(nlogn),也可以直接采取堆排序,时间复杂度同样O(nlogn)。
这样总的时间复杂度O(nlogn)。
程序:program fruit;uses dos;var a:array[1..20000] of longint;n,n1,ans,min1,min2:longint;f:text;t1,t2,t3,t4,t5,t6,t7,t8:word;procedure init;var i:longint;begingettime(t1,t2,t3,t4);assign(f,'fruit.in');reset(f);readln(f,n);for i:=1 to n do read(f,a[i]);close(f);end;procedure qsort(l,r:longint);var i,j,x,temp:longint;begini:=l;j:=r;x:=a[random(r-l+1)+l];repeatwhile a[i]<x do i:=i+1;while a[j]>x do j:=j-1;if i<=j thenbegintemp:=a[i];a[i]:=a[j];a[j]:=temp;i:=i+1;j:=j-1;end;until i>j;if l<j then qsort(l,j);if i<r then qsort(i,r);end;function deletemin:longint;var i,j,temp:longint;begindeletemin:=a[1];a[1]:=a[n1];n1:=n1-1;i:=1;while i<=n1 div 2 dobeginif (a[2*i]<a[2*i+1]) or (2*i=n1) then j:=2*i else j:=2*i+1; if a[i]>a[j] thenbegintemp:=a[i];a[i]:=a[j];a[j]:=temp;i:=j;endelse exit;end;end;procedure insert(x:longint);beginn1:=n1+1;a[n1]:=x;i:=n1;while (i>1) and (a[i]<a[i div 2]) dobegintemp:=a[i];a[i]:=a[i div 2];a[i div 2]:=temp;i:=i div 2;end;end;procedure main;var i,j,k1,k2:longint;beginn1:=n;for i:=1 to n-1 dobeginmin1:=deletemin;min2:=deletemin;insert(min1+min2);ans:=ans+min1+min2;end;assign(f,'fruit.out');rewrite(f);writeln(f,ans);close(f);gettime(t5,t6,t7,t8);t:=((t5-t1)*60+(t6-t2))*60+(t7-t3)+(t8-t4)/100;writeln(t:0:3);end;begininit;qsort(1,n);main;end.三、合唱队形算法:最长子序列+枚举分析:不妨,枚举每个人为中间身高最高的人,要使出列的人数最小,即这个人的左边和右边都有尽可能多的人。
NOIP初赛模拟试题(Pascal语言提高组)
NOIP初赛模拟试题(Pascal语言提高组)一、单项选择题(共10题,每题1.5分,共计15分。
每题有且仅有一个正确答案。
)1.建立了计算机最主要的结构原理的人是()。
A.图灵B.比尔·盖茨C.冯·诺伊曼D.克拉拉·丹E.哥德尔2.设a、b、c是三个布尔型(boolean)的变量,则表达式(a∨b)∧(b∨c)∧(c∨a)∧(a∧a)∧(b∧b)的值()。
A.始终为trueB.始终为faleC.当且仅当c为true时为faleD.当且仅当a与b均为true时为trueE.依赖于a、b、c三者的值3.设a、b为两个浮点(float)型变量,下面的表达式中最有可能为真的是()。
A.a=bB.a某a+2某a某b+b某b=(a+b)某(a+b)C.(a+b)某(a-b)+b某b-a某a<0.0001D.a/b=1/(b/a)E.qrt(a)某qrt(b)=qrt(a某b)4.下面的数据中,在编程中用长整型(longint)表示最恰当的是()。
A.宇宙中的原子数目B.一头大象的体重(用吨表示)C.姚明的身高(用厘米表示)D.一个山村的准确人口数E.从现在(2006年)到2022奥运会开幕的倒计时秒数5.一个三叉树(即每个节点最多有三个孩子)中,有k个孩子的结点数目表示为S(k),则下列关系一定成立的是()。
A.S(0)=2某S(3)+S(2)-1B.S(0)>3某S(3)+2某S(2)-1C.S(0)<3某S(3)+2某S(2)+1D.S(0)<2某S(3)+S(2)E.S(0)<=3某S(3)+2某S(2)6.佳佳在网上购买了一个空间,建设了一个网站。
那么,他向网站上上传网页时最有可能采用的网络协议是()。
A.72B.843C.112.5minD.3h48min16E.超过24小时8.假设用双核CPU运行我们平常编写的信息学竞赛程序,相对于同等规格的单核CPU而言,运行时间()。
【精选资料】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历年真题-2004_2010
历年真题:2004年第十届全国青少年信息学奥林匹克联赛初赛试题(提高组 Pascal 语言 二小时完成 )●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●一、 单项选择题(共10题,每题1.5分,共计15分。
每题有且仅有一个正确答案.)。
1. 设全集I = {a, b, c, d, e, f, g},集合A = {a, b, c},B = {b, d, e},C = {e, f,g},那么集合)(~)(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} //注意顺序,没有难度了选a2. 由3个a ,5个b 和2个c 构成的所有字符串中,包含子串“abc ”的共有( )个。
A. 40320B. 39600C. 840D. 780E. 60//1abc,2a,4b,1c →8!/(2!*4!*1!*1!*1!)=840-2abc,3b,1a →6!/(2!*3!*1!)=60 选d3.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。
已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,出,进,进,进,出,出,进,出”。
假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为( )。
A. 1, 2, 3, 4, 5B. 1, 2, 4, 5, 7C. 1, 3, 5, 4, 6D. 1, 3, 5, 6, 7E. 1, 3, 6, 5, 7//栈操作,显然是e4. 满二叉树的叶结点个数为N ,则它的结点总数为( )。
A. NB. 2 * NC. 2 * N – 1D. 2 * N + 1E. 2N– 1//需要知道满二叉树的概念,画图就可知道,选c5. 二叉树T ,已知其前序遍历序列为1 2 4 3 5 7 6,中序遍历序列为4 2 1 5 7 3 6,则其后序遍历序列为( )。
NOIP2014提高组复赛试题(C语言版)
CCF全国信息学奥林匹克联赛(NOIP2014)复赛提高组day1(请选手务必仔细阅读本页内容)一.题目概况中文题目名称生活大爆炸版石头剪刀布联合权值飞扬的小鸟英文题目与子目录名rps link bird 可执行文件名rps link bird输入文件名rps.in link.in bird.in 输出文件名rps.out link.out bird.out 每个测试点时限1秒1秒1秒测试点数目101020每个测试点分值10105附加样例文件有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统运行内存上限128M128M128M二.交源程序文件名对于C++语言rps.cpp link.cpp bird.cpp 对于C语言rps.c link.c bird.c 对于pascal语言rps.pas link.pas bird.pas三.编译命令(不包含任何优化开关)对于C++语言g++-o rps rps.cpp–lm g++-o link link.cpp–lmg++-o bird bird.cpp–lm对于C语言gcc-o rps rps.c–lm gcc-o link link.c–lm gcc-o bird bird.c–lm对于pascal语言fpc rps.pas fpc link.pas fpc bird.pas注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm)64x2Dual Core CPU5200+,2.71GHz,内存2G,上述时限以此配置为准。
4、只供Linux格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。
1.生活大爆炸版石头剪刀布(rps.cpp/c/pas)【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。
2004年NOIP联赛提高组初赛试题及答案
第十届全国青少年信息学奥林匹克联赛初赛试题(提高组 Pascal 语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共10题,每题1.5分,共计15分。
每题有且仅有一个正确答案.)。
1.设全集I = {a, b, c, d, e, f, g},集合A = {a, b, c},B = {b, d, e},C = {e, f, g},那么集合BA⋂⋃-为()。
C)(~)(BA. {a, b, c, d}B. {a, b, d, e}C. {b, d, e}D. {b, c, d, e}E. {d, f, g}2.由3个a,5个b和2个c构成的所有字符串中,包含子串“abc”的共有()个。
A. 40320B. 39600C. 840D. 780E. 603.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。
已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,出,进,进,进,出,出,进,出”。
假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为()。
A. 1, 2, 3, 4, 5B. 1, 2, 4, 5, 7C. 1, 3, 5, 4, 6D. 1, 3, 5, 6, 7E. 1, 3, 6, 5, 74.满二叉树的叶结点个数为N,则它的结点总数为()。
A. NB. 2 * NC. 2 * N – 1D. 2 * N + 1E. 2N– 15.二叉树T,已知其前序遍历序列为1 2 4 3 5 7 6,中序遍历序列为4 2 1 5 7 3 6,则其后序遍历序列为()。
A. 4 2 5 7 6 3 1B. 4 2 7 5 6 3 1C. 4 2 7 5 3 6 1D. 4 7 2 3 5 6 1E. 4 5 2 6 3 7 16.十进制数100.625等值于二进制数()。
A. 1001100.101B. 1100100.101C. 1100100.011D. 1001100.11E. 1001100.017.下面哪个部件对于个人桌面电脑的正常运行不是必需的()。
2004第二届绍兴市小学生信息学奥林匹克试题(PASCAL)
第二届绍兴市少儿信息学奥林匹克竞赛试题(小学组PASCAL语言二小时完成)●●全部试题答案都要求写在答卷纸上,写在试卷上一律无效●●一.选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题2分,每题只有一个正确答案,多选或错选都无分。
共30分)1)PASCAL程序设计语言的命名,是为了纪念()这位伟大的数学家。
A) 巴赫B) 冯.诺依曼C) 帕斯卡D) 图灵2)一般来说,一台计算机的CPU速度越快,那么这台计算机的运行速度也越快,下列CPU 型号中,运行速度最快的是()A) 奔腾4 B) 奔腾2 C) 奔腾3 D) 5863)美元的标识符是$,它和数字4同在一个键上,而且$在上面,数字4在下面,为了输入$这个符号,应配合使用其他的()键。
4)一般计算机开机后总会自动启动Windows操作系统,那么这个操作系统软件安装在计算机的哪个硬件中()?A) 软盘B) 主板芯片C) 硬盘D) ROM5)二进制数(1011)2对应的十进制数是()A) 1011 B) 15 C) 10 D) 116)下列对于计算机病毒的认识中,错误的是()A) 只要不从因特网上下载文件,而只在网上浏览网页、收发电子邮件是不会感染病毒的。
B) 要定期升级杀毒软件,并利用杀毒软件对计算机进行查、杀毒处理C) 一台接入网络的计算机,即使不进行网络的相关操作(浏览网页、收发邮件、下载文件等),也有可能被病毒感染。
D) 安装病毒防火墙可以从一定程度上有效地预防病毒的感染。
7)按照网站域名的一般约定,下列网站地址中,描述错误的是()A) B) www@C) D) 8)现实生活中我们只要配备相关的硬件和软件,就可以直接通过因特网完成很多的工作,下列功能中,目前在因特网上还不能直接实现的是()A) 看到对方当前的实时摄像B) 象使用电话机一样通过声音和对方聊天C) 护士通过网络往患者体内注射药水D) 通过文字和对方进行实时交流(聊天)9)下列关于计算机的说法中,错误的是()A) 软件是由程序和相关的文档资料组成的B) 操作系统是一种软件C) 一台不装任何软件的计算机不能帮助你进行文字编辑处理D) 世界上第一台电子计算机是在德国诞生的。
NOIP2004普及组复赛试题
我们假定多多在每个单位时间内,可以做下列四件事情中的一件:
1)
从路边跳到最靠近路边(即第一行)的某棵花生植株;
2)
从一棵植株跳到前后左右与之相邻的另一棵植株;
3)
采摘一棵植株下的花生;
4)
从最靠近路边(即第一行)的某棵花生植株跳回路边。
现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花 生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。
【样例输入】
53
62
72
53
54
04
06
【样例输出】
3
2、花生采摘(peanuts.pas/c/cpp)
【问题描述】
鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间 小路散步,突然发现路边 的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花 生田,花生植株整齐地排列成矩形网格(如图 1)。有经验的多多一眼就能看出,每棵花生 植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株, 去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生 ;依此类推,不过 你一定要在我限定的时间内回到路边。”
5 3 1 23 45 【样例输出】
1 24 53 【数据规模】 对于 30%的数据,N<=15; 对于 60%的数据,N<=50; 对于全部的数据,N<=10000;
例如在图 2 所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分 别为 13, 7, 15, 9。沿着图示的路线,多多在 21 个单位时间内,最多可以采到 37 个花生。
NOIP提高组复赛试题汇编(1998-2010)
NOIP 19981.火车从始发站(称为第1站)开出,在始发站上车的人数为a ,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a 人。
从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。
现给出的条件是:共有N 个车站,始发站上车的人数为a ,最后一站下车的人数是m (全部下车)。
试问x 站开出时车上的人数是多少?2.设有n 个正整数(n ≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213又如:n=4时,4个整数7,13,4,246联接成的最大整数为:74246133.著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。
例如:其含义为:L+L=L ,L+K=K ,L+V=V ,L+E=E K+L=K ,K+K=V ,K+V=E ,K+E=KLE+E=KV根据这些规则可推导出:L=0,K=1,V=2,E=3同时可以确定该表表示的是4进制加法NOIP 1999第一题拦截导弹某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
样例:INPUTOUTPUT389207155300299170158656(最多能拦截的导弹数)2(要拦截所有导弹最少要配备的系统数)输入:a ,n ,m 和x输出:从x 站开出时车上的人数。
NOIP2004普及组初赛试题及答案
第十届全国青少年信息学奥林匹克联赛初赛试题(普及组 Pascal语言二小时完成)一、选择一个正确答案代码(A/B/C/D/E)填入每题的挂号内1.美籍匈牙利数学家冯·诺依曼对计算机科学发展所做出的贡献是:()A、提出理想计算机数学模型,成为计算机科学理论基础B、是世界上第一个编写计算机程序的人C、提出存储程序工作原理,并设计出第一台具有存储程序功能的计算机EDV ACD、采用集成电路作为计算机的主要功能部件E、指出计算机性能将以每两年翻一番的速度向前发展2.下列哪个不是CPU(中央处理单元)()A、Intel ItaniumB、DDR SDRAMC、AMD Athlon64D、AMD OpteronE、IBM Power 53、下列网络中常用的名字缩写对应的中文解释错误的是()A、WWW(World Wide Web):万维网B、URL(Uinform Resource Locator):统一资源定位器C、HTTP(Hypertext Transfer Protocol):超文本传输协议D、FTP (File Transfer Protocol):快速传输协议E、TCP (Transfer Control Protocol):传输控制协议4、下面哪个部件对于个人桌面电脑的正常运行不是必需的()A、cpuB、显卡(图形卡)C、光驱D、主板E、内存5、下列哪个软件属于操作系统软件()A、Microsoft WordB、金山词霸C、FoxmailD、WinRARE、Red Hat Linux6、下列哪个不是计算机存储设备()、A、文件管理器B、内存C、高速缓存D、硬盘E、U盘7、下列说法中错误的是()A、CPU的基本功能就是执行指令B、CPU访问内存的速度快于访问高速缓存的速度C、CPU的主频是指CPU在1秒内完成的指令周期数D、在一台计算机内部,一个内存地址编码对应唯一的一个内存单元E、数据中线的宽度决定了一次传递数据量的大小8、彩色显示器所显示的五彩斑斓的色彩,是由红色,蓝色和()色混合而成的A、紫色B、白色C、黑色D、绿色E、橙色9、用静电吸附磨粉后转移到纸张上,是那种输出设备的工作方式()A、针式打印机B、喷墨打印机C、激光打印机D、笔式绘图仪E、喷墨绘图仪10、一台计算机如果要利用电话线上网,就必须配置能够对数字信号和模拟信号进行互相转换的设备,这种设备是()A、调制解调器B、路由器C、网卡D、网关E、网桥11、下列哪个不是数据库软件的名称()A、MYSQLB、SQL SeverC、OracleD、金山影霸E、Foxpro12、下列哪个程序设计语言不支持面向对象的程序设计方法()A、C++B、Object PascalC、CD、SmalltalkE、Java13、由3个a,1个b和2个c构成的所有字符串中,包含子串“abc”的共有()个A、20B、8C、16D、12E、2414、某车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。
NOIP历年复赛提高组试题
全国信息学奥林匹克分区联赛(NOIP)复赛提高组试题第一届全国信息学奥林匹克分区联赛(NOIP1995)复赛试题(提高组竞赛用时:3.5小时)1、编码问题设有一个数组A:ARRAY[0..N-1]OFINTEGER;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
例如:N=6时,有:A=(4,3,0,5,1,2)此时,数组A的编码定义如下:A[0]的编码为0;A[i]的编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)∴上面数组A的编码为:B=(0,0,0,3,1,2)程序要求解决以下问题:①给出数组A后,求出其编码。
②给出数组A的编码后,求出A中的原数据。
2、灯的排列问题设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……N k(k表示不同颜色灯的个数)。
放灯时要遵守下列规则:①同一种颜色的灯不能分开;②不同颜色的灯之间至少要有一个空位置。
例如:N=8(格子数);R=2(红灯数);B=3(蓝灯数),放置的方法有:R-B顺序B-R顺序放置的方法总数为12种。
数据输入的方式为:NP1(颜色,为一个字母)N1(灯的数量)P2 N2……Q(结束标记,Q本身不是灯的颜色)程序要求:求出一种顺序的放置(排列)方案及放置(排列)方案总数。
3、积木块上的数字设有一个四层的积木块,1~4层积木块的数量依次为:5,6,7,8,如下图所示放置:其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出来的。
计算的方法是:第三层的某个数据A是由第四层相邻的两个数据B,C经过某种计算后产生的:计算所用到的计算符为:+,-,⨯,且无优先级之分(自左向右计算),运算符最多为2个。
如:3+4⨯5=35 5⨯4+3=23可以看出,上图中的第三层的数据是由第四层的数据用以下计算公式计算出来的:A=B⨯C+B也就是:8=2⨯3+2,15=3⨯4+3,……14=2⨯6+2程序要求:给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。
NOIP提高组复赛试题
全国信息学奥林匹克联赛(2014)复赛提高组11.生活大爆炸版石头剪刀布()【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。
如果两个人出拳一样,则不分胜负。
在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。
升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。
这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。
现在,小A和小B尝试玩这种升级版的猜拳游戏。
已知他们的出拳都是有周期性规律的,但周期长度不一定相等。
例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B 以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……”已知小A和小B一共进行N次猜拳。
每一次赢的人得1分,输的得0分;平局两人都得0分。
现请你统计N次猜拳结束之后两人的得分。
【输入】输入文件名为。
第一行包含三个整数:N,,,分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。
数与数之间以一个空格分隔。
第二行包含个整数,表示小A出拳的规律,第三行包含个整数,表示小B出拳的规律。
其中,0表示“剪刀”,1表示“石头”,2表示“布”,3表示“蜥蜴人”,4表示“斯波克”。
数与数之间以一个空格分隔。
【输出】输出文件名为。
输出一行,包含两个整数,以一个空格分隔,分别表示小A、小B的得分。
【输入输出样例1】【输入输出样例2】【数据说明】对于100%的数据,0 < N ≤200,0 < ≤200,0< ≤200。
2.联合权值()【问题描述】无向连通图G有n个点,1条边。
点从1到n依次编号,编号为i的点的权值为,每条边的长度均为1。
历届noip提高组复赛试题
N O I’95“同创杯”全国青少年信息学(计算机)奥林匹克竞赛分区联赛复赛试题(高中组)(上机编程,完成时间:210分钟)<1>编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
N-1),N1数据输入的方式为:NP1(颜色,为一个字母) N1(灯的数量)P2 N2……Q(结束标记,Q本身不是灯的颜色)程序要求:求出一种顺序的排列方案及排列总数。
<3> 设有一个四层的积木块,1~4层积木块的数量依次为:5,6,7,82个。
例如n=2时的比赛安排:队 1 2 3 4比赛 1==2 3==4 一天1==3 2==4 二天1==4 2==3 三天2.数制转换(20分)设有一个字符串A$的结构为:A$=’m<n>p’其中m为数字串(长度<=20),而n,p均为1或2位的数字串(其中所表达的内容在2-10之间)。
程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n进制),以p进制的形式输出。
例如:A$=’48<10>8’其意义为:将10进制数48,转换成8进制数输出。
输出结果为:48<10>=60<8>4.挖地雷(30分)在一个地图上有N 个地窖(N<=20),每个地窖中埋有一定数量的地雷。
同时,给出地窖之间的连接路径。
[题目要求] 当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接,当设计一(表示1g 砝码有a1个,2g 砝码有a2个,…,20g 砝码有a6个)输出方式:Total=N(N 表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)如输入:1_1_0_0_0_0 (注:下划线表示空格)输出:TOTAL=3 表示可以称出1g ,2g ,3g 三种不同的重量。
noip2002 提高组 复赛试题及参考程序(pascal)
如下图:
小车与所有小球同时开始运动,当小球距小车的距离 <= 0.00001 时,即认为小球被小车接受(小 球落到地面后不能被接受)。
题二 字串变换 (NOIPG2.pas/c/cpp noipg2.in noipg2.out) [问题描述]:
已知有两个字串 A$, B$ 及一组字串变换的规则(至多 6 个规则): A1$ -> B1$ A2$ -> B2$
规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$、A2$ 可以变换为 B2$ …。 例如:A$='abcd' B$='xyz'
begin hash:=(hash shl 4)+ord(st[i]); <>0 then hash:=hash xor(g shr 24); hash:=hash and(not g);
end; exit(hash mod maxm); end;
end; s1[p]:=' '; p:=pos(map[i,1],s1); end; end; end; writeln('NO ANSWER!'); end;
begin assign(input,'noipg2.in');reset(input); assign(output,'noipg2.out');rewrite(output); init; bfs; close(input);close(output);
2004年连云港市信息学(计算机)奥林匹克分区联赛模拟试题(普及组 PASCAL语言)
2004年连云港市信息学(计算机)奥林匹克分区联赛模拟试题(普及组PASCAL语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、选择一个正确答案代码(A/B/C/D/E),填入每题的括号内 (每题1.5分,多选无分,共30分)1.()是以结构化的形式来设计和编写程序.A.软件工程B.算法设计C.数据结构D.网络设计E.数据库开发2.微型计算机的内存储器比外存储器().A.存储容量大B.价格便宜C.存储可靠性高D.读写速度快E.便于携带3.一个字是()位.A.16 B.8 C.32 D.64 E.以上任意一个4.下面有关进制中的式子,正确的是().A.(11)10=(13)9B.(32)8÷(15)8=(2.14)8C.(21)10×(128)10=(1080)16 D.(52)5-(70)3=(110)2E.(11.5)10=(1011.101)25.计算机系统由硬件系统和软件系统组成,平常我们所说的计算机软件是由程序和()组成.A.相关文档B.相关资料C.相关工具D.相关说明E.相关平台6.人们使用高级语言编写出来的程序,一般先要翻译成为().A.标准程序B.翻译程序C.执行程序D.编译程序E.目标程序7.关于计算机病毒,正确的说法是().A.病毒是计算机被黑客攻击后造成的B.病毒只传染给可执行文件C.如果某台电脑感染了病毒,那么它将会传染给附近的电脑D.计算机病毒的特点是:传播性、潜伏性、破坏性、通用性等E.计算机“千年虫”不是计算机病毒。
8.采用()图形表示方法在计算机中表示图像,重新调节图像会产生波纹状或颗粒状图像.A.位图B.矢量图C.二进制D.平面图E.量化9.下列高级语言中,能用于面向对象程序设计的是().A.DBASE III B.FORTRAN C.PASCAL D. C++ E.BASIC 10.既是输入设备又是输出设备的是().A.磁盘驱动器B.键盘C.显示器D.鼠标E.数字化仪11.因特网起源于().A.美国科学基金会B.美国国防部C.欧洲粒子物理实验室D.英国剑桥大学E.英特公司12.指出以下统一资源定位器各部分的名称(从左到右),/main/index.html 以下哪个正确?().1 2 3 4A.1主机域名2服务标志3目录名4文件名B.1服务标志2目录名3主机域名4文件名C.1服务标志2主机域名3目录名4文件名D.1目录名2主机域名3服务标志4文件名E.1目录名2服务标志3目录名4文件名13.TCP/IP有()层协议.A.3 B.4 C.5 D.6 E.714.请从逻辑的角度在后面的括号中填入后续数字;8, 6, 7, 5, 6, 4, ().A.1 B.2 C.3 D.4 E.52)log2n D.)(nO E.)(2nO16.一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是A.2 3 4 1 5 B.5 4 1 3 2 C.2 3 1 4 5 D.1 5 4 3 2 E.2 3 4 5 1 17.设数据A[10..100,20..100]以行优先的方式顺序存储,每个元素占4个字节,且已知A[10,20]的地址为1000,则A[50,90]的地址是().A.14350 B.14240 C.15340 D.15350 E.15200 18.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为().A.50 B.51 C.70 D.71 E.9819.对序列(45,36,18,53,72,30,48,93,15,36)进行快速排序,( )是执行第一趟快速排序后得到的序列.A .[36,36,18,15,30]45[48,93,72,53]B .[36,36,18, 30,15]45[48, 72,93,53]C .[36,36,18,15,45]30[48,93,72,53]D .[36,36,18,15,30] 53[48,93,72, 45]E .[36,36 ,18,15,30] 53[48,93,72, 45]20.一个有n 个顶点的无向图最多有( )边.A .1-nB .nC .2/)1(-n nD .n 2E .2)1(-n二、问题解答(6+5分,共11分)1.求1到1000不能被5,6和8整除的整数个数为 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十届信息学奥林匹克联赛复赛试题(NOIP2004)一、津津的储蓄计划(save.pas/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二、合并果子(fruit.pas/c/cpp)【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
多多决定把所有的果子合成一堆。
每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。
可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。
多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。
假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。
例如有3种果子,数目依次为1,2,9。
可以先将1、2堆合并,新堆数目为3,耗费体力为3。
接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。
所以多多总共耗费体力=3+12=15。
可以证明15为最小的体力耗费值。
【输入文件】输入文件fruit.in包括两行,第一行是一个整数n(1<=n<=10000),表示果子的种类数。
第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i种果子的数目。
【输出文件】输出文件fruit.out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。
输入数据保证这个值小于231。
【样例输入】3129【样例输出】15【数据规模】对于30%的数据,保证有n<=1000:对于50%的数据,保证有n<=5000;对于全部的数据,保证有n<=10000。
三、合唱队形(chorus.pas/c/cpp)【问题描述】N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
【输入文件】输入文件chorus.in的第一行是一个整数N(2<=N<=100),表示同学的总数。
第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。
【输出文件】输出文件chorus.out包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
【样例输入】8186186150200160130197220【样例输出】4【数据规模】对于50%的数据,保证有n<=20;对于全部的数据,保证有n<=100。
四、虫食算(alpha.pas/c/cpp)【问题描述】所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。
来看一个简单的例子:43#9865#045+8468#663344445506978其中#号代表被虫子啃掉的数字。
根据算式,我们很容易判断:第一行的两个数字分别是5和3,第二行的数字是5。
现在,我们对问题做两个限制:首先,我们只考虑加法的虫食算。
这里的加法是N进制加法,算式中三个数都有N 位,允许有前导的0。
其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。
如果这个算式是N进制的,我们就取英文字母表午的前N个大写字母来表示这个算式中的0到N-1这N个不同的数字:但是这N 个字母并不一定顺序地代表0到N-1)。
输入数据保证N个字母分别至少出现一次。
BADC+CRDADCCC上面的算式是一个4进制的算式。
很显然,我们只要让ABCD分别代表0123,便可以让这个式子成立了。
你的任务是,对于给定的N进制加法算式,求出N个不同的字母分别代表的数字,使得该加法算式成立。
输入数据保证有且仅有一组解,【输入文件】输入文件alpha.in包含4行。
第一行有一个正整数N(N<=26),后面的3行每行有一个由大写字母组成的字符串,分别代表两个加数以及和。
这3个字符串左右两端都没有空格,从高位到低位,并且恰好有N位。
【输出文件】输出文件alpha.out包含一行。
在这一行中,应当包含唯一的那组解。
解是这样表示的:输出N个数字,分别表示A,B,C……所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。
【样例输入】5ABCEDBDACEEBBAA【样例输出】10342【数据规模】对于30%的数据,保证有N<=10;对于50%的数据,保证有N<=15;对于全部的数据,保证有N<=26。
第一题:varx,tot,i,save:longint;beginassign(input,'save.in');reset(input);assign(output,'save.out');rewrite(output);tot:=0;save:=0;for i:=1to12dobegintot:=tot+300;readln(x);tot:=tot-x;if tot<0thenbeginwrite('-',i);close(input);close(output);halt;end;if tot>=100then save:=save+tot div100;tot:=tot mod100;end;tot:=tot+save*120;write(tot);close(input);close(output);end.第二题:constmaxn=10001;varn,i,k,t:longint;f:array[0..maxn]of int64;time:int64;procedure qsort(l,r:longint);vari,x,j,t:longint;begini:=l;j:=r;x:=f[(l+r)div2];repeatwhile f[i]<x do inc(i);while f[j]>x do dec(j);if i<=j thenbegint:=f[i];f[i]:=f[j];f[j]:=t;inc(i);dec(j);end;until i>j;if i<r then qsort(i,r);if l<j then qsort(l,j);end;beginassign(input,'fruit.in');reset(input); assign(output,'fruit.out');rewrite(output); readln(n);for i:=1to n do read(f[i]);qsort(1,n);time:=0;i:=2;while i<=n dobeginf[i]:=f[i]+f[i-1];time:=time+f[i];k:=i;while(f[k]>f[k+1])and(k<n)dobegint:=f[k+1];f[k+1]:=f[k];f[k]:=t;inc(k);end;inc(i);end;write(time);close(input);close(output);end.第三题:varn,i,x,max,j:longint;f,f1,f2:array[0..101]of longint;beginassign(input,'chorus.in');reset(input);assign(output,'chorus.out');rewrite(output);readln(n);for i:=1to n do read(f[i]);{for i:=1to n dobeginf1[i]:=1;f2[i]:=1;end;}for i:=n downto1dofor j:=i+1to n+1doif(f[j]<f[i])and(f2[i]<f2[j]+1)then f2[i]:=f2[j]+1;for i:=1to n dofor j:=i-1downto0doif(f[i]>f[j])and(f1[i]<f1[j]+1)then f1[i]:=f1[j]+1;for i:=1to n doif f1[i]+f2[i]>max then max:=f1[i]+f2[i];write(n-max+1);close(input);close(output);end.。