noip2008普及组复赛试题(附题解)
2008noip普及组复赛--排座位--代码C++

2.排座椅(seat.pas/c/cpp)【问题描述】上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。
不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。
于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。
在该方案下,上课时交头接耳的学生对数最少。
【输入】输入文件seat.in的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。
接下来D行,每行有4个用空格隔开的整数,第i行的4个整数X i,Y i,P i,Q i,表示坐在位置(X i,Y i)与(P i,Q i)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
【输出】输出文件seat.out共两行。
第一行包含K个整数,a1a2……a K,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第a K行和第a K+1行之间要开辟通道,其中a i< a i+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1b2……b k,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第b L列和第b L+1列之间要开辟通道,其中b i< b i+1,每两个整数之间用空格隔开(行尾没有空格)。
【输入输出样例解释】1 2 3 4 5上图中用符号*、※、+ 标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。
noip普及组复赛模拟试题12答案

【试题描述】读入二行整数,然后程序要完成如下的操作:第一步将2行数合并在一起,第二步将合并好的数由大到小排序,第三步重新排列,从第一个数起开始编号,然后将奇数号上的数(样例中的13,9,5)从前向后排,偶数号上的数(样例中的12,7,4)从后往前排。
第四步计算,将排好的数,第一个+第二个数的2倍+第三个数的3倍+…第五步:输出计算的结果。
【输入描述】第一行是一个整数 n(1≤n≤10),第二行有n个整数,整数范围在1~100之间,数与数之间空格隔开。
第三行是一个整数 m(1≤m≤10),第四行有m个整数,整数范围在1~100之间,数与数之间空格隔开。
【输出描述】一个整数(最后计算的结果)。
【输入样例】412 4 5 9213 7【输出样例】 169【解题提示】样例说明:第一步合并后为:12 4 5 9 13 7第二步上例中的数成为:13 12 9 7 5 4第三步得到:13 9 5 4 7 12第四步计算后为:13+2×9+3×5+4×4+5×7+6×12=169最后输出 169【试题来源】 2008年江苏省小学生信息学(计算机)奥赛program ex1731;var m,n,i,j,s,t,b1,b2:integer;a,b,c:array[1..20] of integer;sum:longint;beginreadln(n);for i:=1 to n do read(a[i]);readln(m);for i:=1 to m do read(a[i+n]);s:=m+n;for i:=1 to s-1 dofor j:=i+1 to s doif a[i]<a[j] then begint:=a[i];a[i]:=a[j];a[j]:=t;end;b1:=0;b2:=0;for i:=1 to s doif i mod 2=1 then begin inc(b1); b[b1]:=a[i];endelse begin inc(b2); c[b2]:=a[i];end;for i:=1 to b1 do a[i]:=b[i];for i:=1 to b2 do a[b1+i]:=c[b2-i+1];sum:=0;for i:=1 to s dosum:=sum+i*a[i];writeln(sum);end.输入 615 34 25 9 22 39423 17 46 57输出1496输入1015 34 25 9 22 39 47 12 33 99823 17 46 57 51 8 38 64输出5687SHLQSH数问题描述:我们把t1 , t2 (包括t1 , t2 (1<=t1<t2<=10000000))之间的所有数的约数个数和n称为t1 , t2的shlqsh数;问题是给出数据t1 , t2后,求t1 , t2的shlqsh数;输入输入文件shlqsh.in 仅包含一行,共有两个整数,表示t1 t2 (用空格分开)输出输出文件shlqsh.out 仅有一个整数,表示t1 , t2之间的shlqsh数。
1995-2008复赛试题及解析

NOIP1995年复赛试题1. 设有下列的算式:求出□中的数字,并打印出完整的算式来。
8 0 9 ------------- □□) □□□□ □□------------- □□□ □□□ ------------- 12. 方阵填数:在一个N ⨯N 的方阵中,填入1,2,……N ⨯N 个数,并要求构成如下的格式: 例:3. 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A 类数,否则就称其为B 类数。
例如:(13)10=(1101)2 其中1的个数为3,0的个数为1,则称此数为A 类数; (10)10=(1010)2 其中1的个数为2,0的个数也为2,称此数为B 类数; (24)10=(11000)2 其中1的个数为2,0的个数为3,则称此数为B 类数; 程序要求:求出1~1000之中(包括1与1000),全部A 、B 两类数的个数。
4.编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER ;数组中存放的元素为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 中的原数据。
5. 灯的排列问题:设在一排上有N 个格子(N ≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N 1,N 2,……N k (k 表示不同颜色灯的个数)。
放灯时要遵守下列规则:同一种颜色的灯不能分开;不同颜色的灯之间至少要有一个空位置。
例如:N=8(格子数) R=2(红灯数) B=3(蓝灯数) 放置的方法有:N=513 14 15 16 1 12 23 24 17 2 11 22 25 18 3 10 21 20 19 4 9 8 7 6 5N=616 17 18 19 20 1 153****221214 29 36 33 22 3 132****423412 27 26 25 24 5 11 10 9 8 7 6B-R 顺序放置的总数为12种。
CSP-J(NOIP普及组)历年复赛真题考察内容(1998~2021)

CSP-J(NOIP普及组)历年复赛真题考察内容(1998~2021)1.CSP-J 2021思维、选择结构排序、归并排序⼤模拟双向链表、模拟2.CSP-J 2020位运算、进制转换桶排序栈、深搜动态规划(⾼级)3.CSP-J 2019字符串模拟、队列背包⼴搜、最短路4.NOIP2018 普及组字符串枚举、预处理动态规划(⾼级)⼆叉树5.NOIP2017 普及组顺序结构结构体排序深搜、剪枝⼆分、动态规划6.NOIP2016 普及组⼀重循环回⽂⼤模拟、队列枚举、前缀和7.NOIP2015 普及组⼀重循环⼆维数组组合数学贪⼼、优先队列8.NOIP2014 普及组模拟枚举、gcd模拟、找规律动态规划(⾼级)9.NOIP2013 普及组⼆重循环栈动态规划(⾼级)拓扑排序10.NOIP2012 普及组⼀重循环、质数模拟、取模背包、动态规划最短路11.NOIP2011 普及组进制转换字符串归并排序动态规划(⾼级)、栈12.NOIP2010 普及组⼆维数组模拟贪⼼贪⼼、博弈13.NOIP2009 普及组模拟结构体排序约数动态规划(⾼级)14.NOIP2008 普及组字符串贪⼼动态规划(⾼级)结构体排序贪⼼贪⼼⾼精度16.NOIP2006 普及组⼀维数组01背包模拟进制转换17.NOIP2005 普及组⼀维数组⼀维数组01背包⾼精度18.NOIP2004 普及组⼀重循环贪⼼递归、⼆叉树STL、深搜19.NOIP2003 普及组模拟动态规划(⾼级)组合数学、卡特兰数⾼精度20.NOIP2002 普及组⼀重循环深搜深搜递推、动态规划21.NOIP2001 普及组递推、递归枚举、gcd⼆叉树⼀元⼀次⽅程、模拟不等式、数论动态规划、⾼精度深搜23.NOIP1999 普及组找规律进制转换贪⼼24.NOIP1998 普及组简单数学、枚举、进制转换⾼精度深搜。
noip普及组复赛入门测试(答案+测试数据)

一、新龟兔赛跑(文件名xgtsp.pas)新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间T小时中的K小时拿来睡觉。
现在给你比赛的总时间T、兔子的睡觉时间K、兔子的速度U、乌龟的速度V,需要你求出该次比赛谁最后获胜。
输入第一行为一个整数X,表示有X组输入数据。
每组数据只有一行,包括4个数T、K、U、V (1 ≤ T≤ 300,0 ≤ K ≤ T,1 ≤ U ≤ 100,1 ≤ V ≤ 100)。
对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。
允许输入一组数后立即输出对应的结果。
样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*t>U*(t-k) then writeln(1);if v*t<U*(t-k) then writeln(-1);if v*t=U*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:XQLC.PAS )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,……。
每次弹起的高度都是上一次高度的一半。
求小球第N次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入N,输出反弹高度和经过路程,结果保留两位小数。
NOIP2008普及组复赛思路及程序(PASCAL)

第一题Program Gy;ConstName='isbn';VarA,B:String;Procedure Inp;BeginAssign(Input,Name+'.in');Reset(Input); Assign(Output,Name+'.out');Rewrite(Output); Readln(A);End;Procedure Main;Var i,j,k:Longint;Beginj:=0;k:=0;For i:=1 to Length(A)-1 doIf A[i]in['0'..'9']thenBeginInc(k);j:=j+(Ord(A[i])-Ord('0'))*k;End;j:=j mod 11;B:=A;If j=10 then B[Length(B)]:='X'Else B[Length(B)]:=Chr(j+Ord('0')); End;Procedure Oup;BeginIf B=A then Writeln('Right')Else Writeln(B);Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第二题Program Gy;Uses Math;ConstName='seat';Varx1,y1,x2,y2:Array[1..3000]of Longint;N,M,K,L,D:longint;A,C:Array[1..2,1..2000]of Longint;B1,B2:Array[1..2000]of Byte;Procedure Inp;Var i:longint;BeginAssign(Input,Name+'.in');Reset(Input);Assign(Output,Name+'.out');Rewrite(Output); Randomize;Readln(M,N,K,L,D);For i:=1 to D do Readln(x1[i],y1[i],x2[i],y2[i]); End;Procedure Sort(p,l,r:Longint);Var i,j,x,y:Longint;Begini:=l;j:=r;x:=a[p,Random(r-l)+l];RepeatWhile a[p,i]>x do Inc(i);While a[p,j]<x do Dec(j);If i<=j thenBeginy:=a[p,i];a[p,i]:=a[p,j];a[p,j]:=y;y:=c[p,i];c[p,i]:=c[p,j];c[p,j]:=y;Inc(i);Dec(j);End;Until i>j;If l<j then Sort(p,l,j);If i<r then Sort(p,i,r);End;Procedure Main;Var i:Longint;BeginFor i:=1 to M do C[1,i]:=i;For i:=1 to N do C[2,i]:=i;For i:=1 to d doIf x1[i]=x2[i]then Inc(A[2,Min(y1[i],y2[i])]) Else Inc(A[1,Min(x1[i],x2[i])]);Sort(1,1,N);Sort(2,1,M);For i:=1 to K do B1[C[1,i]]:=1;For i:=1 to L do B2[C[2,i]]:=1;End;Procedure Oup;Var i,j:Longint;Beginj:=0;For i:=1 to M-1 doIf b1[i]=1 thenBeginInc(j);Write(i);If j<>K then Write(' '); End;Writeln;j:=0;For i:=1 to N-1 doIf b2[i]=1 thenBeginInc(j);Write(i);If j<>L then Write(' '); End;Writeln;Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第三题Program Gy;Uses Math;ConstName='ball';VarF:Array[0..1,1..500]of Longint;M,N:Longint;Procedure Inp;BeginAssign(Input,Name+'.in');Reset(Input); Assign(Output,Name+'.out');Rewrite(Output); Readln(n,m);End;Procedure Main;Var i,j:Longint;BeginF[0,1]:=1;For i:=1 to M doFor j:=1 to N doF[i mod 2,j]:=F[(i-1)mod 2,(j+n-2)mod n+1]+F[(i-1)mod 2,(j+n)mod n+1]; End;Procedure Oup;BeginWriteln(F[M mod 2,1]);Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第四题Program Gy;ConstWork='drawing';TypeRec=RecordX,Y:longint;Arr=Array[1..20000] of Longint;VarA:Array[1..300,1..300] of Longint;N,M,MaxN,MaxM:Longint;B:Array[1..1000,1..1000]of Char;Procedure Inp;Var i,j:Longint;BeginAssign(Input,Work+'.in');Reset(Input);Assign(Output,Work+'.out');Rewrite(Output);Read(n,m);For i:=1 to N doFor j:=1 to M doRead(a[n+1-i,j]);MaxN:=0;MaxM:=0;For i:=1 to N doFor j:=1 to M doBeginIf 2*i+4*j+1>MaxM then MaxM:=2*i+4*j+1;If (2*i+3*a[i,j]+1>MaxN) then Maxn:=2*i+3*a[i,j]+1; End;For i:=1 to MaxN doFor j:=1 to MaxM doB[i,j]:='.';Procedure Main;Var i,j,k,x,y:Longint; BeginFor i:=N downto 1 do For j:=1 to M doFor k:=1 to A[i,j] do BeginY:=2*i+4*j-5;X:=2*i+3*k-4; B[x,y]:='+';B[x,y+1]:='-';B[x,y+2]:='-';B[x,y+3]:='-';B[x,y+4]:='+';B[x+1,y]:='|';B[x+1,y+1]:=' ';B[x+1,y+2]:=' ';B[x+1,y+3]:=' ';B[x+1,y+4]:='|';B[x+1,y+5]:='/';B[x+2,y]:='|';B[x+2,y+1]:=' ';B[x+2,y+2]:=' ';B[x+2,y+3]:=' ';B[x+2,y+4]:='|'; B[x+2,y+5]:=' '; B[x+2,y+6]:='+'; B[x+3,y]:='+';B[x+3,y+1]:='-'; B[x+3,y+2]:='-'; B[x+3,y+3]:='-'; B[x+3,y+4]:='+'; B[x+3,y+5]:=' '; B[x+3,y+6]:='|'; B[x+4,y+1]:='/'; B[x+4,y+2]:=' '; B[x+4,y+3]:=' '; B[x+4,y+4]:=' '; B[x+4,y+5]:='/'; B[x+4,y+6]:='|'; B[x+5,y+2]:='+'; B[x+5,y+3]:='-'; B[x+5,y+4]:='-'; B[x+5,y+5]:='-'; B[x+5,y+6]:='+'; End;End; Procedure Oup;Var i,j:Longint;BeginFor i:=MaxN downto 1 do BeginFor j:=1 to MaxM do Write(b[i,j]);Writeln;End;Close(Input);Close(Output);End;BeginInp;Main;Oup;End.第3题要一步一步算,程序如下varm,n,i,j:integer;a:array[-30..30,0..30]of longint; beginassign(input,'ball.in');reset(input);assign(output,'ball.out');rewrite(output);read(m,n);for i:=-n to n doif i mod m=0then a[i,n]:=1else a[i,n]:=0;for i:=n-1 downto 0 dofor j:=-i to i doa[j,i]:=a[j 1,i 1] a[j-1,i 1];writeln(a[0,0]);close(input);close(output)end.第四题的话,要按从上到下一层一层的覆盖,并且要先算出输出图形的大小,程序如下(不好意思,因为本人水平问题,这个程序只能通过小的数据)vars:array[1..150]of string;a:array[1..50,1..50]of integer;m,n,i,j,p,q,k,l,x,y:integer;beginassign(input,'drawing.in');reset(input);assign(output,'drawing.out');rewrite(output);read(m,n);for i:=1 to m dofor j:=1 to n doread(a[i,j]);p:=4*n 1 2*m;q:=0;for i:=1 to m dofor j:=1 to n doif 3*a[i,j] 3 2*m-2*i>q then q:=3*a[i,j] 3 2*m-2*i; for i:=1 to q dobegins[i]:='';for j:=1 to p dos[i]:=s[i] '.'end;for i:=1 to m dobeginx:=q-2*m 2*i;for j:=1 to n dobeginy:=1 2*m-2*i (j-1)*4;s[x][y]:=' ';s[x][y 4]:=' ';for k:=1 to 3 dos[x][y k]:='-';s[x-1][y 1]:='/';s[x-1][y 5]:='/';s[x-2][y 2]:=' ';s[x-2][y 6]:=' ';for k:=1 to a[i,j] dobeginfor l:=1 to 2 dobegins[x-l-3*(k-1)][y]:='|';s[x-l-3*(k-1)][y 4]:='|'; s[x-1-l-3*(k-1)][y 5]:=' '; s[x-2-l-3*(k-1)][y 6]:='|' end;s[x-3*k][y]:=' ';s[x-3*k][y 4]:=' ';for l:=1 to 3 dobegins[x 1-3*k][y l]:=' ';s[x 2-3*k][y l]:=' 'end;s[x-2-3*k][y 2]:=' ';s[x-2-3*k][y 6]:=' ';for l:=1 to 3 dos[x-1-3*k][y 1 l]:=' ';s[x-1-3*k][y 1]:='/';s[x-1-3*k][y 5]:='/';for l:=1 to 3 dobegins[x-3*k][y l]:='-';s[x-3*k-2][y l 2]:='-'endend;endend;for i:=1 to q dowriteln(s[i]);close(input);close(output)end.以上是推荐回答,你可以参考如下其他回答相关问题• 求个NOIP复赛用的标准PASCAL,告诉我下载地址• 找 NOIP 2007 提高组复赛的解题报告(free pascal)• noip复赛什么时候举行?• 请问NOIP复赛中的输入输出文件需要自己制作还是比赛前就提供好的?• 请问pascal一道NOIP题目,有关逻辑判断设计江湖为你用户的其他回答参考: 其他答案我也错了请问你是怎么知道成绩的啊?谢谢第三题:首先利用DP计算杨辉三角形的第n-1层,存入数组a,如果m是偶数则将a的正中那个数存入s,否则将0存入s,再将a数组中n的倍数加入s.就5分,不写了第四题:昨天奋斗了1小时,发现自己在考试时编的程序有问题..按照我考试时写的那个程序是不能出现0的..恩,扯远了.只要先将所有数据读入,计算字符串数组顶格的偏移值s1,然后从左往右,从下往上,从后往前画正方体,最后再将左端的'.'删除就可以了.只有C的源代码:#include <stdio.h>char s[501][402];void drawing(int px,int py,int n){int i;s[px][py 2]=' ';for(i=3;i<6;i )s[px][py i]='-';s[px][py 6]=' ';s[px 1][py 1]='/';for(i=2;i<5;i )s[px 1][py i]=' ';s[px 1][py 5]='/';s[px 2][py]=' ';for(i=1;i<4;i )s[px 2][py i]='-';s[px 2][py 4]=' ';for(i=1;i<=n;i ){s[px 3*i][py]=s[px 3*i 1][py]=s[px 3*i][py 4]=s[px 3*i 1][py 4]=s[px 3*i-2][py 6]=s[px 3*i-1][py 6]='|';s[px 3*i][py 1]=s[px 3*i][py 2]=s[px 3*i][py 3]=s[px 3*i 1][py 1]=s[px 3*i 1][py 2]=s[px 3*i 1][py 3]=s[px 3*i-1][py 5]=s[px 3*i][py 5]=' ';s[px 3*i][py 6]=s[px 3*i 2][py]=s[px 3*i 2][py 4]=' ';s[px 3*i 2][py 1]=s[px 3*i 2][py 2]=s[px 3*i 2][py 3]='-'; s[px 3*i 1][py 5]='/';}}int main(){FILE *in,*out;int m,n,i,j,s1=0,k;in=fopen("drawing.in","r");out=fopen("drawing.out","w");fscanf(in,"%d%d",&m,&n);for(i=0;i<501;i ){for(j=0;j<2*m 4*n 1;j ){s[i][j]='.';}s[i][j]='\0';}for(i=0;i<m;i ){for(j=0;j<n;j ){fscanf(in,"%d",&k);s1=2*i s1-k*3<0?k*3-2*i:s1;}}fseek(in,0,0);fscanf(in,"%d%d",&m,&n);for(i=0;i<m;i ){for(j=0;j<n;j ){fscanf(in,"%d",&k);if(k)drawing(2*i s1-k*3,2*m-2*i-2 4*j,k);}}k=0;for(j=0;j<2*m 4*n 1;j ){for(i=0;i<s1 2*m 1;i ){if(s[i][j]!='.'){j=402;break;}}if(j!=402)k ;}for(i=0;i<s1 2*m 1;i ){fprintf(out,"%s ",s[i] k);}fclose(in); fclose(out); return 0;}。
NOIP2008普及组初赛试题(附答案)

NOIP2008普及组初赛试题+答案第十四届全国青少年信息学奥林匹克联赛初赛试题(普及组Pascal语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案.)。
1.微型计算机中,控制器的基本功能是:A.控制机器各个部件协调工作B.实现算术运算和逻辑运算C.获取外部信息D.存放程序和数据2.设A=TRUE B=fALSE C=TRUE D=fALSE以下逻辑运算中表达式值为真的是:A.(A∧B)∨(C∧D∨┐A)B.((┐A∧B)∨C)∧┐D)C.(B∨C∨D)∧D∧AD.A∧(D∨┐C)∧B3.在下列关于图灵奖的说法中,不正确的是:A.图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业做出重要贡献的个人B.图灵奖有计算机界诺贝尔奖的称号C.迄今为止,还没有华裔计算机科学家获此殊荣D.图灵奖的名称取自计算机科学的先驱、英国科学家阿兰•图灵4.计算机在工作过程中,若突然停电,()中的信息不会丢失。
A.ROM和RAMB.CPUC.ROMD.RAM5.完全二叉树共有2n-1个节点,则它的叶节点数为:A.N-1B.NC.2*ND.2^N-16.在下列各项中,()不是操作系统软件。
A.SolarisB.linuxC.Windows VistaD.Sybase7.设栈S的初始状态为空,元素A,B,C,D,E,f依次入栈S,出栈的序列为B,D,f,E,C,A,则栈S 的容量至少应该是:A.6B.5C.4D.38.与十进制数28.5625相等的四进制数是:A.123.21B.131.22C.130.22D.130.219.设字符串S="Olympic",S的非空字串的数目为A.28B.29C.16D.1710.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享,下列网站中,()是典型的Web2.0应用。
noip普及组复赛答案

noip普及组复赛答案【篇一:noip普及组复赛入门测试(答案+测试数据)】class=txt>新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。
由于兔子的坏习惯,它总喜欢把比赛的总时间t小时中的k小时拿来睡觉。
现在给你比赛的总时间t、兔子的睡觉时间k、兔子的速度u、乌龟的速度v,需要你求出该次比赛谁最后获胜。
输入第一行为一个整数x,表示有x组输入数据。
每组数据只有一行,包括4个数t、k、u、v (1 ≤ t≤ 300,0 ≤ k ≤ t,1 ≤ u ≤ 100,1 ≤ v ≤ 100)。
对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。
允许输入一组数后立即输出对应的结果。
样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*tu*(t-k) then writeln(1);if v*tu*(t-k) then writeln(-1);if v*t=u*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:xqlc.pas )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,??。
每次弹起的高度都是上一次高度的一半。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国信息学奥林匹克联赛(NOIP2008)复赛
普及组
注意事项:
1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
各省在自测时可根据具体配置调整时限。
1.ISBN号码
(isbn.pas/c/cpp)
【问题描述】
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2......以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2, (9)
再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
【输入】
输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
【输出】
输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
2.排座椅
(seat.pas/c/cpp)
【问题描述】
上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。
不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。
同学们在教室中坐成了M行N列,坐在第i行第j列
的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。
于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。
在该方案下,上课时交头接耳的学生对数最少。
【输入】
输入文件seat.in的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。
接下来D行,每行有4个用空格隔开的整数,第i行的4个整数X i,Y i,P i,Q i,表示坐在位置(X i,Y i)与(P i,Q i)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
【输出】
输出文件seat.out共两行。
第一行包含K个整数,a1a2……a K,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第a K行和第a K+1行之间要开辟通道,其中a i< a i+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1b2……b k,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第b L列和第b L+1列之间要开辟通道,其中b i< b i+1,每两个整数之间用空格隔开(行尾没有空格)。
上图中用符号*、※、+ 标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。
本题贪心可以得满分的。
当然本题的贪心需要预处理下,开2个一维数组,row[i] 记录如果在第i行加通道,可以分割多少对调皮学生,col[i]记录如果在第j列加通道,可以分割多少对调皮学生,最后贪心法输出分割学生最多的前K行和前L列。
3.传球游戏
(ball.pas/c/cpp)
【问题描述】
上体育课的时候,小蛮的老师经常带着同学们一起做游戏。
这次,老师带着同学们一起做传球游戏。
游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。
聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。
两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。
比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。
【输入】
输入文件ball.in共一行,有两个用空格隔开的整数n,m(3<=n<=30,1<=m<=30)。
【输出】
输出文件ball.out共一行,有一个整数,表示符合题意的方法数。
【限制】
40%的数据满足:3<=n<=30,1<=m<=20
100%的数据满足:3<=n<=30,1<=m<=30
直接dp,似乎说递推更确切点。
f(i,k)表示经过k次传到编号为i的人手中的方案数。
那么可以推出下面的方程:f(i,k)=f(i-1,k-1)+f(i+1,k-1) (i=1或n时,需单独处理)
边界条件:f(1,0)=1;
结果在f(1,m)中
4.立体图
(drawing.pas/c/cpp)
【问题描述】
小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容。
最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。
小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的积木(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。
我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:
+---+
/ /| 高
+---+ |
| | +
| |/ 宽
+---+
长
每个顶点用1个加号‟+‟表示,长用3个”-“表示,宽用1个”/”表示,高用两个”|”表示。
字符‟+‟…-…‟/‟…|‟的ASCII码分别为43,45,47,124。
字符‟.‟(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用‟.‟代替。
立体图的画法如下面的规则:若两块积木左右相邻,图示为:
..+---+---+
./ / /|
+---+---+ |
| | | +
| | |/.
+---+---+..
若两块积木上下相邻,图示为:
..+---+
./ /|
+---+ |
| | +
| |/|
+---+ |
| | +
| |/.
+---+..
若两块积木前后相邻,图示为:
….+---+
…/ /|
..+---+ |
./ /| +
+---+ |/.
| | +..
| |/…
+---+….
立体图中,定义位于第(m,1)的格子(即第m行第1列的格子)上面自底向上的第一块
积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。
【输入】
输入文件drawing.in第一行有用空格隔开的两个整数m和n,表示有m*n个格子(1<=m,n<=50)。
接下来的m行,是一个m*n的矩阵,每行有n个用空格隔开的整数,其中第i行第j 列上的整数表示第i行第j列的格子上摞有多少个积木(1<=每个格子上的积木数<=100)。
【输出】
输出文件drawing.out中包含题目要求的立体图,是一个K行L列的字符矩阵,其中K 和L表示最少需要K行L列才能按规定输出立体图。
Pku原题,编号2330
算不上难题,但是比较麻烦,细心点就ok了。
先计算好画布的大小,再写一个根据左下角坐标绘制一个单位立方体的子程序。
然后遵循下面法则,不停绘制若干个立方体。
(此处能体现出分割程序的伟大)因为要不停的覆盖,所以要遵循“视觉法则”:
1.先绘里层再绘外层
2.先绘底层再绘上层
3.先绘左边再绘右边。