文档库 最新最全的文档下载
当前位置:文档库 › NOIP2011普及组复赛(试题+源程序)

NOIP2011普及组复赛(试题+源程序)

NOIP2011普及组复赛(试题+源程序)
NOIP2011普及组复赛(试题+源程序)

NOIP2011 普及组复赛

1 .数字反转(reverse.cpp/c/pas )

【问题描述】

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为

零,否则反转后得到的新数的最高位数字不应为零。(参见样例2)

【输入】

输入文件名为reverse. in 。

输入共一行,一个整数No

【输出】

输出文件名为reverse.out 。

输出共1行,一个整数,表示反转后的新数。

【输入输出样例1】

-1,000,000,000 < N< 1,000,000,000 。

【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及但测试数据没出)。

-0 , 【法一】字符串处理

Var i,l,k:i nteger;

s:stri ng;

p:boolea n;

begin

assig n(i nput, 'reverse.i n'); reset(i nput);

assig n(o utput, 'reverse.out'); rewrite(output);

readl n( s);

l:=le ngth(s);

k:=1;

if s[1]=' -' the n

begin

write('-');

k:=2;

en d;

p:=true;;

for i:=l dow nto k do

begin

if(p)a nd((s[i]='0')) the n continue

else

begin

write(s[i]); p:=false;;

en d;

en d;

close(i nput); close(output);

en d.

【法二】数字处理

Var f:i nteger;

n,an s:lo ngint;

begin

assig n(i nput, 'reverse.i n'); reset(i nput);

assig n(o utput, 'reverse.out'); rewrite(output);

readl n(n);

if n<0 the n

begin f:=-1; n :=-n;

end

else

f:=1;

an s:=0;

while n<>0 do

begin

an s:=a ns*10+n mod 10; n:=n div 10;

en d;

an s:=a ns*f;

writel n(a ns);

close(i nput); close(output);

en d.

2.统计单词数(stat.pas/c/cpp)

【问题描述】

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的

某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一

部分则不算匹配(参见样例2)

【输入】输入文件名为stat.in, 2行。

第1行为一个字符串,其中只含字母,表示给定单词;

第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

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

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。

【输入输出样例1】

1

输出结果表示给定的单词To在文章中出现两次,第一次出现的位置为0。

2

表示给定的单词to在文章中没有出现,输出整数-1。

【数据范围】1W单词长度w 10。

1W文章长度w 1,000,000。

【解题】这道题也不是很难,

program stat; var l,n, p:l ongint;

s,s1:stri ng; c:char;

begin

assig n(i nput,'stat.i n'); reset(i nput);

assig n(o utput,'stat.out'); rewrite(output);

readl n( s);

s:=upcase(s); // 函数upcase() 参数可为char,也可为string

i:=-1; //i统计读入的字符位置,首个字符出现的位置是0

s1:=”;〃s1累加读入的字符

n:=0; 〃n统计出现次数

p:=-1; 〃p标记第一次出现的位置

repeat

read(c);

c:=upcase(c); // 统一大小写

i:=i+1;

if c=' ' the n //遇到空格,匹配是否相同

begin

if s=s1 the n

begin

n:=n+1;

if p=-1 then 〃p标记第一次出现的位置,如果p是第一次更改,记录位置

p:=i-le ngth(s);

en d;

s1:=";

end

else

s1:=s1+c; //不是空格,继续叠加

un til eoln (i nput);

if s1=s then //处理最后一个单词是否相同的情况

begin

n:=n+1;

if p=-1 the n

p:=i-le ngth(s) +1; // 最后没有空格

en d;

if n=0 then writel n(-1)

else writel n(n,' ',p);

close(i nput);close(output);

en d.

3.瑞士轮(swiss.cpp/c/pas)

【背景】

在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。

本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。它可以看作

是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。

【问题描述】

2*N名编号为1~2N的选手共进行R轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前。

每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1名和第2名、第3名和第4名、……、

第2K - 1名和第2K名、……、第2N - 1名和第2N名,各进行一场比赛。每场比赛胜者得1分,负

者得0分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中

的表现。

现给定每个选手的初始分数及其实力值,试计算在R轮比赛过后,排名第Q的选手编号是多少。我

们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。

【输入】

输入文件名为swiss.in 。

输入的第一行是三个正整数N、R、Q,每两个数之间用一个空格隔开,表示有2*N名选手、R轮

比赛,以及我们关心的名次Q。

第二行是2*N个非负整数S1, S2,…,S N,每两个数之间用一个空格隔开,其中s表示编号为i的选手

的初始分数。

第三行是2*N个正整数W1, W2,…,WN,每两个数之间用一个空格隔开,其中wi表示编号为i的选手

的实力值。

【输出】

输出文件名为swiss.out 。

输出只有一行,包含一个整数,即R轮比赛结束后,排名第Q的选手的编号。

【输入输出样例】

【输入输出样例说明】

【数据范围】

对于30%的数据,1 < N < 100;

对于50%的数据,1 < N< 10,000;

对于100%的数据,1 < N < 100,000, K R< 50, K Q< 2N, 0< S1, S2,…,S N w 108, K w1,W2,…,w

w 108。

【解题】题目虽然长,但理解题意后就发现解题的瓶颈在于排序。

如果每一轮比赛的结果都进行快速排序,时间复杂度为0 (Rlongn ),但事实证明这样只能拿60分。

如何AC,这需要一个巧算法:分析得知,快速排序实际上进行了许多无用的工作:

如果两个人在第i轮都赢了,那么第i轮后的先后关系与第i-1轮是一样的;反之,如果两人都输了,他们的先后关系也不会变。

所以,我们有一个新算法:一开始做一趟快速排序,然后对于每一轮,将此轮的n个赢者(他们的先

后关系和上一轮不变)和n个输者(他们的先后关系和上一轮也不变分开,然后就是归并,于是时间复杂度0 (Rn)) (实践证明,如果单纯的排序r次,必然结果是超时。事实上只需一次真正意义上的排序以后,在以

后的比赛中,按原顺序分成两组,获胜组和失败组,这两组依然是有序的,再把这两组归并成一组,就可以了。总时间复杂度O(N*R)

program swiss;

var a,b,v:array[1..200000]of Ion gi nt;

c,d:array[1..100000,1..2]of Ion gi nt;

n ,r,q,i,j:l on gi nt;

procedure qsort(l,r:l ongin t); var i,j,mid1,mid2,t:lo ngint; begin

i:=l;j:=r; mid1:=a[(l+r)div 2]; mid2:=v[(l+r)div 2];

repeat 〃按分数从高到低排序,分数相同的,编号较小的选手排名靠前while (a[i]>mid1) or (a[i]=mid1) and (v[i]

while (a[j]mid2) do dec(j);

if i<=j the n

begin

t:=a[i]; a[i]:=a[j]; a[j]:=t;

t:=v[i]; v[i]:=v[j]; v[j]:=t;

in c(i); dec(j);

en d;

un til i>j;

if i

if l

en d;

procedure mergesort; // 归并排序

var i,l1,l2:lo ngi nt; begin

i:=0; l1:=1; l2:=1; repeat

if (c[l1,1]>d[l2,1])or (c[l1,1]=d[l2,1])a nd(c[l1,2]

i:=i+1;

a[i]:=c[l1,1]; v[i]:=c[l1,2]; 11:=11+1; end else

begin

i:=i+1;

a[i]:=d[l2,1]; v[i]:=d[l2,2]; 12:=12+1; en d;

un til (l1> n)or(l2> n); while l1<=n do

begin

i:=i+1;

a[i]:=c[l1,1]; v[i]:=c[l1,2]; 11:=11+1; en d; while l2<=n do

begin

i:=i+1;

a[i]:=d[l2,1]; v[i]:=d[l2,2]; 12:=12+1; en d; en d;

begin

//王程序

assig n(i nput,'swiss.i n');reset(i nput); assig n(o utput,'swiss.out');rewrite(output);

c[j,1]:=a[2*j]; c[j,2]:=v[2*j]; d[j,1]:=a[2*j-1];

readl n(n ,r,q);

for i:= 1 to n*2 do read(a[i]); for i:= 1 to n*2 do read(b[i]); for i:=1 to n*2 do v[i]:=i; qsort(1,2* n); for i:= 1 to r do

begin

for j:= 1 to n do

if b[v[2*j-1]]>b[v[2*j]] then

begin

in c(a[2*j-1]); c[j,1]:=a[2*j-1]; c[j,2]:=v[2*j-1]; d[j,1]:=a[2*j]; d[j,2]:=v[2*j]; end

else

begin

in c(a[2*j]);

//数组a 保存初始分数

〃数组b 保存实力值

〃数组v[i]保存排名第i 的选手编号

〃数组c[j,1]保存嬴方的总分;数组 〃数组d[j,1]保存输方的总分;数组

c[j,2]保存嬴方的号码;

d[j,2]保存输方的号码;

d[j,2]:=v[2*j-1]; en d;

mergesort;

en d;

writel n(v[q]);

close(i nput);close(output); en d.

4.表达式的值(exp.cpp/c/pas)

【问题描述】

1

运算的优先级是:

1.先计算括号内的,再计算括号外的。

2.“X”运算优先于“①”运算,即计算表达式时,先计算X运算,再计算?运算。

例如:计算表达式A? B X C时,先计算B X C,其结果再与A做?运算。

现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字0或者1,请问有多少种填法可以

使得表达式的值为0。

【输入】

输入文件名为exp.in ,共2行。

第1行为一个整数L,表示给定的表达式中除去横线外的运算符和括号的个数。

第2行为一个字符串包含L个字符,其中只包含’('’)’、’+''这4种字符,其中’

(''是左右括号,、+'、分别表示前面定义的运算符“?”和“X”。这行字符按顺序给出了给定表达式中除去变量外的运算符和括号。【输出】

输出文件exp.out共1行。包含一个整数,即所有的方案数。注意:这个数可能会很大,

请输出方案数对10007取模后的结果。

【输入输出样例1】

给定的表达式包括横线字符之后为:_+(_*_)

在横线位置填入(0、0、0)、(0、1、0)、(0、0、1)时,表达式的值均为0,所以共有3种填法。

【数据范围】

对于20%的数据有0< L< 10。

对于50%的数据有0 < L < 1,000。

对于70%的数据有0< L < 10,000。

对于100%的数据有0< LW 100,000。

对于50%的数据输入表达式中不含括号。

【解题】

算法类似于表达式计算,一个符号栈,两个数据栈。记f(s,0)表示表达式s为0的方案数,f(s,1)表示表

达式s为1的方案数。

f(a+b,0) = f(a,0)*f(b,0)

f(a+b,1) = f(a,0)*f(b,0)+f(a,0)*f(b,1)+f(a,1)*f(b,0)

f(a*b,O)=f(a,O)*f(b,O) + f(a,1)*f(b,0) + f(a,0)*f(b,1) f(a*b,1)

= f(a,1) * f(b,1) flag:array[1..4,1..4] of char =( { ( }

{ + } ('<','>','<','>'),

{ * } ('<','>','>','>'),

{ ) } ('>','>','>','>') );//符号优先级表

program exp; const max n= 100010; op:array[1..4] of char = ('(','+','*',')'); var stack_op:array[1..max n] of char; stack_data0, stack_data1:array[1..max n] of longint; n ,top_op, top_data, i, le n:l ongint; a0, a1, b0, b1, t0, t1:lo ngint;

s: ansistring ;

ch,no w:char;

procedure push_op(ch:char); begin in c(top_op); stack_op[top_op]:=ch; en d; //运算符压栈

function pop_op:char; begin pop_op:= stack_op[top_op];

dec(top_op);

en d; //运算符出栈

fun ctio n gettop:char; 〃取栈顶符号

begin gettop:=stack_op[top_op]; en d; procedure push_data(a0,a1:lo ngi nt); 〃数据压栈

begin in c(top_data);

stack_data0[top_data]:=a0;

stack_data1[top_data]:=a1;

en d;

procedure pop_data(var a0,a1:lo ngin t); 〃数据出栈 begin a0:=stack_data0[top_data];

a1:=stack_data1[top_data];

dec(top_data);

en d; fun ctio n fin d(ch:char):i nteger; var i:l ongint; begin for i:= 1 to 4 do if op[i]=ch the n exit(i); en

d;

//读入符号

begin assig n(i nput,'exp.i n'); assig n(o utput,'exp.out'); reset(i nput); rewrite(output);

top_op:=0;

top_data:=0;

// top_op 运算符栈顶指针;

top_data 数据栈顶指针

readl n(n);

readl n( s);

s:=s+')';

len:=le ngth(s);

i:=1;

while i<=le n do

begin

if i=22 then

readl n;

case flag[find(gettop),find(s[i])] of

'<': begi n

push_op(s[i]); 〃运算符出栈

if (s[i]<>'(') the n push_data(1,1); // 数据出栈

in c(i);

en d;

'=': begi n no w:=pop_op; in c(i); end;

'>': begi n

pop_data(a0,a1);

pop_data(b0,b1);

no w:=pop_op;

if no w='+' the n

begin

t0:= (aO*bO) mod 10007;

t1:= ((a0*b1) mod 10007+(a1*b1) mod 10007+ (a1*b0) mod 10007) mod 10007; push_data(t0,t1);

end

else

begin

t0:= ((a0*b1) mod 10007 + (a1*b0) mod 10007 + (a0*b0) mod 10007 ) mod 10007; t1:= (a1*b1) mod 10007;

push_data(t0,t1);

en d;

en d;

en d;

en d;

writel n(stack_data0[top_data]);

close(i nput); close(output);

end.

noip普及组复赛模拟试题26(答案)

1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。【输入】输入文件名为reverse.in。 输入共 1 行,一个整数N。 【输出】输出文件名为reverse.out。 输出共 1 行,一个整数,表示反转后的新数。 【输入输出样例1】reverse.in reverse.out 123 321 【输入输出样例2】Reverse.in reverse.out -380 -83 【数据范围】-1,000,000,000 ≤N≤1,000,000,000。 var s3,s1,s2:string; n,i:integer; begin assign(input,'reverse.in');reset(input); assign(output,'reverse.out');rewrite(output); read(s1); n:=length(s1); if s1[1]='-' then begin s2:='-'; for i:=1 to n-1 do s1[i]:=s1[i+1]; delete(s1,n,1); end; n:=length(s1); for i:=1 to n do s3:=s3+s1[n-i+1]; i:=1; while(s3[i]='0')and(length(s3)>1) do delete(s3,1,1); write(s2+s3); close(input);close(output); end. 2.统计单词数(stat.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章 中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1), 如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。 【输入】输入文件名为stat.in,2 行。 第 1 行为一个字符串,其中只含字母,表示给定单词; 第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

noip普及组复赛模拟试题18

1. 话说去年苹果们被陶陶摘下来后都很生气,于是就用最先进的克隆技术把陶陶克隆了好多份>.<然后把他们挂在树上,准备摘取。摘取的规则是,一个苹果只能摘一个陶陶,且只能在它所能摘到的高度以下(即是小于关系)的最高的陶陶,如果摘不到的话只能灰溜溜的走开了>.<给出苹果数目及每个苹果可以够到的高度和各个陶陶的高度,求苹果们都摘完后剩下多少个陶陶…… 【输入格式】第一行为两个数,分别为苹果的数量n和陶陶的数量m(n,m<=2000)以下的n行,分别为各个苹果能够到的最大高度。再接下来的m行,分别为各个陶陶的高度。高度均不高于300。 当然了,摘取的顺序按照输入的“苹果够到的最大高度”的顺序来摘。 【输出格式】输出仅有一个数,是剩下的陶陶的数量 【样例输入】5 5↙9↙10↙2↙3↙1↙6↙7↙8↙9↙10 【样例输出】3 2. 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:5 279 7 279则按输出错误处理,不能得分。【输入】输入文件scholar.in包含n+1行: 第1行为一个正整数n,表示该校参加评选的学生人数。 第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。 【输出】输出文件scholar.out共有5行,每行是两个用空格隔开的正整数, 依次表示前5名学生的学号和总分。 【输入输出样例1】 scholar.in scholar.out 6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98 6 265 4 264 3 258 2 244 1 237 【输入输出样例2】 scholar.in scholar.out 8 80 89 89 8 265 2 264

NOIP2007普及组(复赛)

全国信息学奥林匹克联赛(NOIP2007)复赛普及组 1.奖学金 (scholar.pas/c/cpp) 【问题描述】 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 5 279 7 279 则按输出错误处理,不能得分。 【输入】 输入文件scholar.in包含n+1行: 第1行为一个正整数n,表示该校参加评选的学生人数。 第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。 【输出】 输出文件scholar.out共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。

NOIP竞赛模拟试题

NOIP2016普及组复赛模拟赛试卷 普及组 (请选手务必仔细阅读本页内容) 二.提交源程序文件名 三.编译命令(不包含任何优化开关) 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。 3、统一评测时采用的机器配置为:CPU P4 3.0GHz,内存 2G,上述时限以此配置为准。 4、特别提醒:评测在Windows下进行,评测软件为cena8.0。

River Hopscotch (jump.pas/c/cpp) 【问题描述】 每年,奶牛们都举办一种特殊的跳房子游戏,在这个游戏中,大家小心翼翼地在河中的岩石上跳。这个游戏在一条笔直的河中进行,以一块岩石表示开始,以另一块距离起点L单位长度的岩石表示结束。在这两块岩石中间还有N 块岩石,每块的位置距离起点是 Di 个单位长度。 玩这个游戏的时候,每头牛从开始的那块岩石想办法要跳到表示结束的那块岩石上。中间只能在从某块岩石跳跃到另一块岩石,反复的这样跳。当然,不够敏捷的牛永远跳不到终点,最终只能落入河中。 农民 John 为他的牛感到自豪,每年都观看比赛。随着时间的推移,他对于那些胆小的只能跳过很短距离的牛感到厌烦。为了那些牛,其他农民会把岩石的间距弄得很小。他计划移除一些岩石,从而增加奶牛在跳跃时需要的最短距离。他不能移除开始和结束的两块岩石。但是除此之外他可以移除 M 块岩石。 FJ 希望知道他能够增加多少最短跳跃距离。求当他移除了M块岩石后,奶牛从开始跳到结束的岩石,每次跳跃的最短距离至多可以增加到多少。 【输入格式】 第1行: 三个用空格分开的整数,分别是 L, N 和 M。 第2..N+1行: 每行一个整数,表示中间N块岩石的位置,没有两块岩石处于同一位置。 【输出格式】 输出共一行一个整数,表示移除某M块岩石后,相邻岩石间距最小值的最大可能情况。 【输入样例】 25 5 2 2 14 11 21 17 【输出样例】 4 【输入说明】中间有 5 块岩石,坐标 2, 11, 14, 17 和 21。开始岩石在0,结束岩石在25。 【输出解释】没有移除任何岩石之前,最少需要跳2个单位长度,从0到2。当移除了位于 2 和 14的两块岩石后, 需要的最短跳跃距离就变成了4。(从 17 到 21 或从 21 到 25)。 【数据规模】 对于30%的数据: 0≤N≤100; 对于50%的数据: 0≤N≤5,000; 对于100%的数据:1≤L≤1,000,000,000;0≤N≤50,000;0

NOIP2002普及组(复赛)

2002年全国青少年信息学(计算机)奥林匹克分区联赛复赛试题 (普及组竞赛用时:3 小时) 题一级数求和(存盘名:NOIPC1) [问题描述]: 已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。 现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。 [输入] 键盘输入 k [输出] 屏幕输出 n [输入输出样例] 输人:1 输出:2 题二选数(存盘名:NOIPC2) [问题描述]: 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的和为素数:3+7+19=29)。 [输入]: 键盘输入,格式为: n , k (1<=n<=20,k<n) x1,x2,…,xn (1<=xi<=5000000) [输出]: 屏幕输出,格式为: 一个整数(满足条件的种数)。 [输入输出样例]: 输入: 4 3 3 7 12 19 输出: 1

[问题描述]: 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。 规则: 一位数可变换成另一个一位数: 规则的右部不能为零。 例如:n=234。有规则(k=2): 2-> 5 3-> 6 上面的整数 234 经过变换后可能产生出的整数为(包括原数): 234 534 264 564 共 4 种不同的产生数 问题: 给出一个整数 n 和 k 个规则。 求出: 经过任意次的变换(0次或多次),能产生出多少个不同整数。 仅要求输出个数。 [输入]: 键盘输人,格式为: n k x1 y1 x2 y2 ... ... xn yn [输出]: 屏幕输出,格式为: 一个整数(满足条件的个数): [输入输出样例]: 输入: 234 2 2 5 3 6 输出: 4

NOIP1999普及组(复赛)

第五届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题 (普及组 竞赛用时:3小时) 第一题 Cantor 表(30分) 现代数学的著名证明之一是Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 我们以Z 字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入:整数N (1≤N ≤10000000) 输出:表中的第N 项 样例: INPUT OUTPUT N=7 1/4 第二题 回文数(30分) 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加56(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指进行了一次N 进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N (2<=N<=10,N=16)进制数M ,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible !” 样例: INPUT OUTPUT N = 9 M= 87 STEP=6 第三题 旅行家的预算(40分) 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C (以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P 和沿途油站数N (N 可以为零),油站i 离出发点的距离Di 、每升汽油价格Pi (i=1,2,…,N )。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution ”。 样例: INPUT … 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … …

【精品】第十三届全国信息学奥林匹克联赛复赛试题(普及组

第十三届全国信息学奥林匹克联赛复赛试题(普及组)

第十三届全国信息学奥林匹克联赛(NOIP2007)复赛 普及组试题 1.奖学金 (scholar.pas/c/cpp) 【问题描述】 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语

文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 5 279 7 279 则按输出错误处理,不能得分。 【输入】 输入文件scholar.in包含n+1行: 第1行为一个正整数n,表示该校参加评选的学生人数。第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。 【输出】 输出文件scholar.out共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。 【输入输出样例1】 scholar.in scholar.out 6 90 67 80 87 66 91 78 89 91

NOIP复赛模拟题一

NOIP复赛模拟题一 1、与3和5无关的数(num.cpp) 描述 一个正整数x,如果它能被x整除,或者它的十进制表示法中某个位数上的数字为x,则称其为与x相关的数.现求所有小于等于n(n<300)的与x无关的正整数的平方和. <300)的与x无关的正整数的平方和.

输入 输入第一行为一个整数N,表示小白鼠的数目。 下面有N行,每行是一只白鼠的信息。第一个为正整数,表示白鼠的重量,; 第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。 注意:白鼠的重量各不相同。 输出 按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。 样例输入 3 30 red 50 blue 40 green 样例输出 red green blue 3、滑雪(skate.cpp) 描述 Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6

NOIP2017普及组初赛试题及答案

NOIP2017普及组初赛试题及答案 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) 1.在8位二进制补码中,10101011表示的数是十进制下的( )。 A. 43 B. -85 C. -43 D. -84 2.计算机存储数据的基本单位是( )。 A. bit B. Byte C. GB D. KB 3.下列协议中与电子邮件无关的是( )。 A. POP3 B. SMTP C. WTO D. IMAP 4.分辨率为800x600、16位色的位图,存储图像信息所需的空间为( )。 A.937.5KB B. 4218.75KB C.4320KB D. 2880KB 5.计算机应用的最早领域是( )。 A.数值计算 B.人工智能 C.机器人 D.过程控制 6.下列不属于面向对象程序设计语言的是( )。 A. C B. C++ C. Java D. C# 7.NOI的中文意思是( )。 A.中国信息学联赛

B.全国青少年信息学奥林匹克竞赛 C.中国青少年信息学奥林匹克竞赛 D.中国计算机协会 8. 2017年10月1日是星期日,1999年10月1日是( )。 A.星期三 B.星期日 C.星期五 D.星期二 9.甲、乙、丙三位同学选修课程,从4门课程中,甲选修2门,乙、丙各选修3门,则不同的选修方案共有( )种。 A. 36 B. 48 C. 96 D. 192 10.设G是有n个结点、m条边(n ≤m)的连通图,必须删去G的( )条边,才能使得G变成一棵树。 A.m–n+1 B. m-n C. m+n+1 D.n–m+1 11.对于给定的序列{ak},我们把(i, j)称为逆序对当且仅当i < j且ai> aj。那么 序列1, 7, 2, 3, 5, 4的逆序对数为()个。 A. 4 B. 5 C. 6 D. 7 12.表达式a * (b + c) * d的后缀形式是()。 A. abcd*+* B. abc+*d* C. a*bc+*d D. b+c*a*d 13.向一个栈顶指针为hs的链式栈中插入一个指针s指向的结点时,应执行( )。

NOIP2007年信息学奥赛普及组复赛参考答案

2007普及组复赛C语言答案; 1.奖学金;(scholar.pas/c/cpp);【问题描述】;某小学最近得到了一笔赞助,打算拿出其中一部分为学;任务:先根据输入的3门课的成绩计算总分,然后按上;7279;5279;这两行数据的含义是:总分最高的两个同学的学号依次;7279;则按输出错误处理,不能得分;【输入】;输入文件scholar.in包含行n+1行:; 2007普及组复赛C语言答案 1.奖学金 (scholar.pas/c/cpp) 【问题描述】 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5 名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是: 7 279

5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 5 279 7 279 则按输出错误处理,不能得分。 【输入】 输入文件scholar.in包含行n+1行: 第l行为一个正整数n,表示该校参加评选的学生人数。 第2到年n+l行,每行有3个用空格隔开的数字,每个数字都在0到100 之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。所给的数据都是正确的,不必检验。 【输出】 输出文件scholar.out共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。 【限制】 50%的数据满足:各学生的总成绩各不相同 100%的数据满足:6<=n<=300

全国信息学奥林匹克联赛(noip2013)复赛试题

全国信息学奥林匹克联赛(NOIP2013 )复赛 普及组 1.记数问题 (count.cpp/c/pas) 【问题描述】 试计算在区间1 到n 的所有整数中,数字x (0 ≤x ≤ 9)共出现了多少次?例如,在1 到11 中,即在1、2、3、4 、5、6、7、8、9、10、11 中,数字1 出现了4 次。【输入】 输入文件名为count.in。 输入共1 行,包含2 个整数n 、x ,之间用一个空格隔开。 【输出】 输出文件名为count.out。 输出共1 行,包含一个整数,表示x 出现的次数。 【输入输出样例】 count.in count.out 11 1 4 【数据说明】 对于100%的数据,1≤ n ≤ 1,000,000,0 ≤x ≤ 9。 2.表达式求值 (expr.cpp/c/pas) 【问题描述】 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 【输入】 输入文件为expr.in。 输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+ ”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0 到231-1 之间的整数。输入数据保 证这一行只有0~ 9、+ 、*这12 种字符。 【输出】 输出文件名为expr.out。 输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4 位时,请只输出最后4 位,前导0 不输出。 第2 页共5 页

【输入输出样例1】 expr.in expr.out 1+1*3+4 8 【输入输出样例2 】 expr.in expr.out 1+1234567890*1 7891 【输入输出样例3 】 expr.in expr.out 1+1000000003*1 4 【输入输出样例说明】 样例1 计算的结果为8,直接输出8。 样例2 计算的结果为1234567891,输出后4 位,即7891 。 样例3 计算的结果为1000000004,输出后4 位,即4 。 【数据范围】 对于30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤ 100; 对于80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤ 1000; 对于100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤ 100000。 3.小朋友的数字 (number.cpp/c/pas) 【问题描述】 有n 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个 小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。 作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人), 小朋友分数加上其特征值的最大值。 请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p 取模后输出。 【输入】 输入文件为number.in。 第一行包含两个正整数n 、p ,之间用一个空格隔开。 第二行包含n 个数,每两个整数之间用一个空格隔开,表示每个小朋友手上的数字。

NOIP2015普及组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2015)复赛 普及组 (请选手务必仔细阅读本页内容) 一、题目概况 中文题目名称金币扫雷游戏求和推销员 coin mine sum salesman 英文题目与子目 录名 可执行文件名coin mine sum salesman 输入文件名coin.in mine.in sum.in salesman.in 输出文件名coin.out mine.out sum.out salesman.out 每个测试点时限1秒 测试点数目10 每个测试点分值10 附加样例文件有 结果比较方式全文比较(过滤行末空格及文末回车) 题目类型传统 运行内存上限128M 二、提交源程序文件名 对于C++语言coin.cpp mine.cpp sum.cpp salesman.cpp 对于C语言coin.c mine.c sum.c salesman.c 对于Pascal语言coin.pas mine.pas sum.pas salesman.pas 四、注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm)II x2240processor,2.8GHz,内存4G,上述时限以此配置为准。 4、只提供Linux格式附加样例文件。 5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。

1.金币 (coin.cpp/c/pas) 【问题描述】 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。 请计算在前K天里,骑士一共获得了多少金币。 【输入格式】 输入文件名为coin.in。 输入文件只有1行,包含一个正整数K,表示发放金币的天数。 【输出格式】 输出文件名为coin.out。 输出文件只有1行,包含一个正整数,即骑士收到的金币数。 【输入输出样例1】 coin.in coin.out 614 见选手目录下的coin/coin1.in和coin/coin1.ans。 【输入输出样例1说明】 骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。 【输入输出样例2】 coin.in coin.out 100029820 见选手目录下的coin/coin2.in和coin/coin2.ans。 【数据说明】 对于100%的数据,1≤K≤10,000。

noip普及组复赛模拟试题17(附答案)

图书馆馆长正犯愁呢,原来,有一堆的书要他整理,每本书都有一个书号(<=32767),现在他有一本书,这本书的书号为K(<=32767),现在他要找出一本书号比这本书大的书和书号比这本小的书(但都要最接近图书馆馆长已有的书号),将找到的这两本书的书号加起来,并算出加起来以后的数是否为素数 Input 第一行二个数为N,K,表示几本书以及手中书的书号(<=32767) 第二行开始有N个整数,表示这些书的书号 Output 第一行一个数,表示两本书书号加起来的和 第二行一个字符,表示和是否为素数,若是则输出"Y"否则输出"F"(引号不打出)Sample Input 6 5 6 4 5 3 1 20 Sample Output 10 F program ex1148; var n,k,i,x,s:integer; a:array[0..32767] of integer; f:boolean; begin readln(n,k); fillchar(a,sizeof(a),0); for i:=1 to n do begin read(x); a[x]:=1; end; s:=0; for i:=k+1 to 32767 do if a[i]<>0 then begin s:=s+i;break; end; for i:=k-1 downto 1 do if a[i]<>0 then begin s:=s+i;break; end; f:=true; for i:=2 to trunc(sqrt(s)) do if s mod i=0 then begin f:=false;break;end; writeln(s); if f=true then write('Y') else write('F'); end. 输入12 7 8 12 18 7 11 3 20 15 14 26 21 16 输出11 Y 输入21 10

历年noip初赛普及组试题(完整资料).doc

【最新整理,下载后即可编辑】 历年noip普及组初赛试题汇编 芜湖县实验学校NOIP初赛复习资料

第十五届全国青少年信息学奥林匹克联赛初赛试题(2009) (普及组C++语言二小时完成) ●●全部试题答案均要求写在答卷纸上,写在试卷纸 上一律无效●● 一.单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确答案。) 1、关于图灵机下面的说法哪个是正确的: A)图灵机是世界上最早的电子计算机。 B)由于大量使用磁带操作,图灵机运行速度很慢。 C)图灵机是英国人图灵发明的,在二战中为破译德军的密码 发挥了重要作用。 D)图灵机只是一个理论上的计算模型。 2、关于计算机内存下面的说法哪个是正确的: A)随机存储器(RAM)的意思是当程序运行时,每次具体分 配给程序的内存位置是随机而不确定的。 B)1MB内存通常是指1024*1024字节大小的内存。 C)计算机内存严格说来包括主存(memory)、高速缓存(cache) 和寄存器(register)三个部分。 D)一般内存中的数据即使在断电的情况下也能保留2个小时 以上。 3、关于BIOS下面说法哪个是正确的: A)BIOS是计算机基本输入输出系统软件的简称。 B)BIOS里包含了键盘、鼠标、声卡、显卡、打印机等常用输 入输出设备的驱动程序。 C)BIOS一般由操作系统厂商来开发完成。

D)BIOS能提供各种文件拷贝、复制、删除以及目录维护等文 件管理功能。 4、关于CPU下面哪个说法是正确的: A)CPU全称为中央处理器(或中央处理单元)。 B)CPU可以直接运行汇编语言。 C)同样主频下,32位的CPU比16位的CPU运行速度快一倍。 D)CPU最早是由Intel公司发明的。 5、关于ASCII,下面哪个说法是正确的: A)ASCII码就是键盘上所有键的唯一编码。 B)一个ASCII码使用一个字节的内存空间就能够存放。 C)最新扩展的ASCII编码方案包含了汉字和其他欧洲语言的 编码。 D)ASCII码是英国人主持制定并推广使用的。 6、下列软件中不是计算机操作系统的是: A) Windows B) Linux C) OS/2 D) WPS 7、关于互联网,下面的说法哪一个是正确的: A)新一代互联网使用的IPv6标准是IPv5标准的升级与补充。 B)互联网的入网主机如果有了域名就不再需要IP地址。 C)互联网的基础协议为TCP/IP协议。 D)互联网上所有可下载的软件及数据资源都是可以合法免 费使用的。 8、关于HTML下面哪种说法是正确的: A)HTML实现了文本、图形、声音乃至视频信息的统一编码。 B)HTML全称为超文本标记语言。 C)网上广泛使用的Flash动画都是由HTML编写的。 D)HTML也是一种高级程序设计语言。

NOIP2007_提高组_复赛试题

全国信息学奥林匹克联赛(NOIP2007)复赛提高组 1.统计数字 (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<=1000 80%的数据满足:1<=n<=50000 100%的数据满足:1<=n<=200000,每个数均不超过1 500 000 000(1.5*109)

2.字符串的展开 (expand.pas/c/cpp) 【问题描述】 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:(1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧 同为小写字母或同为数字,且按照ASCII 码的顺序,减号右边的字符严格大于左边的字符。 (2)参数p1:展开方式。p1=1 时,对于字母子串,填充小写字母;p1=2 时,对于字母子串, 填充大写字母。这两种情况下数字子串的填充方式相同。p1=3 时,不论是字母子串还是数字子串, 都用与要填充的字母个数相同的星号“*”来填充。 (3)参数p2:填充字符的重复个数。p2=k 表示同一个字符要连续填充k 个。例如,当p2=3 时,子串“d-h”应扩展为“deeefffgggh”。减号两侧的字符不变。 (4)参数p3:是否改为逆序:p3=1 表示维持原有顺序,p3=2 表示采用逆序输出,注意这时仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2 时,子串“d-h”应扩展为“dggffeeh”。 (5)如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII 码的顺序小于或等于左边字符, 输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。 【输入】 输入文件expand.in包括两行: 第1 行为用空格隔开的3 个正整数,依次表示参数p1,p2,p3。 第2 行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。 【输出】 输出文件expand.out只有一行,为展开后的字符串。

NOIP模拟试题

全国信息学奥林匹克联赛(NOIP2011)复赛 提高组 模拟模拟试题试题试题(二试) (二试)(请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称密码子翻译苹果二叉树青蛙王子的口令 英文题目与子目录名cell apple order 可执行文件名cell apple order 输入文件cell.in apple.in order.in 输出文件cell.out apple.out order.out 每个测试点时限1秒1秒1秒测试点数目101010每个测试点分值101010附加样例文件有有 有 结果比较方式全文比较(过滤行末空格及文末回车) 题目类型 传统 传统 传统二.提交源程序文件名 三.运行内存限制 对于pascal 语言cell.pas apple.pas order.pas 对于C 语言cell.c apple.c order.c 对于C++语言 cell.cpp apple.cpp order.cpp 内存上限 128M 128M 128M

1.密码子翻译 (cell cell.pas/c/cpp) .pas/c/cpp)【问题描述】 DNA 是一切细胞生物的遗传物质。它能指导蛋白质的合成,从而控制细胞的新陈代谢和生物的性状。 中心法则(genetic central dogma )是所有有细胞结构的生物所遵循的法则,它的主要内容是遗传信息从DNA 传递给mRNA ,再从mRNA 传递给蛋白质的转录和翻译的过程(如图)。 mRNA 是由许多核糖核苷酸组成的链状分子,但这些核糖核苷酸不外乎4种:腺嘌呤核糖核苷酸(A ),鸟嘌呤核糖核苷酸(G ),胞嘧啶核糖核苷酸(C )和尿嘧啶核糖核苷酸(U )。mRNA 上三个相邻的核糖核苷酸序列叫做密码子,一个密码子可以翻译成一个氨基酸,且密码子不重叠。已知:一条mRNA 只能翻译成若干种氨基酸,并且知道决定这些氨基酸的密码子。给出一条mRNA 的核糖核苷酸序列,请你计算出它最多能翻译成多少氨基酸。【输入】 输入文件名为cell.in 。 第一行,一个长度为l 的字符串,表示核糖核苷酸序列。 接下来若干行,每行一个密码子,只有这些密码子能够翻译成氨基酸。相同的密码子不重复出现。 输入数据仅由A 、G 、C 、U 四个大写字母组成。【输出】 输出文件名为cell.out 。 只有一个正整数N ,表示给出的核糖核苷酸序列组成的mRNA 最多能翻译成氨基酸的数目。 【输入输出样例1】【输入输出样例 1说明】 在核糖核苷酸序列ACACGAUC 中标出密码子:ACACGAUC 这样最多只能选取CAC 、 AUC 两个密码子翻译,即输出2。 cell cell.in .in cell.out ACACGAUC CAC AUC CGA 2

NOIP2002普及组初赛试题及答案

第八届全国青少年信息学奥林匹克联赛(NOIP2002)试题 (普及组PASCAL语言二小时完成) 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 一.选择一个正确答案代码(A/B/C/D,填入每题的括号内(每题1.5分,多选无分,共30分) 1)微型计算机的问世是由于( ) 的出现。 A) 中小规模集成电路 B) 晶体管电路 C) (超)大规模集成电路 D) 电子管电路 2)下列说法中正确的是( ) 。 A) 计算机体积越大,其功能就越强 B) CPU的主频越高,其运行速度越快 C) 两个显示器屏幕大小相同,则它们的分辨率必定相同 D)点阵打印机的针数越多,则能打印的汉字字体越多 3)Windows98中,通过查找命令查找文件时,若输入F*.? , 则下列文件( ) 可以被查到。 A) F.BAS B) FABC.BAS C) F.C D) EF. 4)CPU处理数据的基本单位是字,一个字的字长( ) 。 A) 为8个二进制位 B) 为16个二进制位 C) 为32个二进制位 D) 与芯片的型号有关 5)资源管理器的目录前图标中增加"+"号,这个符号的意思是( ) 。 A) 该目录下的子目录已经展开 B) 该目录下还有子目录未展开 C) 该目录下没有子目录 D) 该目录为空目录, 6)下列哪一种程序设计语言是解释执行的( ) 。 A) Pascal B) GWBASIC C) C++ D) FORTRAN 7)启动WORD的不正确方法是( ) 。 A) 单击Office工具栏上的Word图标 B) 单击"开始"→"程序"→Word C) 单击"开始"→"运行",并输入Word按回车 D) 双击桌面上的"Word快捷图标" 8)多媒体计算机是指( ) 计算机。 A) 专供家庭使用的 B) 装有CDROM的 C) 连接在网络上的高级 D) 具有处理文字、图形、声音、影像等信息的 9)在树型目录结构中,不允许两个文件名相同主要是指( ) 。 A) 同一个磁盘的不同目录下 B) 不同磁盘的同一个目录下 C) 不同磁盘的不同目录下、 D) 同一个磁盘的同一个目录下 10)用画笔(Paintbrush)绘制图形并存储在文件中,该图形文件的文件名缺省的后缀为( ) 。 A) .jpg B) .bmp C) .gif D).tiff t11)E-ml地址中用户名和邮件所在服务器名之间的分隔符号是( ) 。 E A) # B) @ C) & D) $ 12)(0.5)10=( ) 16. A) 0.1 B) 0.75 C) 0.8 D) 0.25

NOIP普及组复赛试题源程序

N O I P2011普及组复赛 1.数字反转(c/pas) 【问题描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。(参见样例2) 【输入】 输入文件名为。 输入共一行,一个整数N。 【输出】 输出文件名为。 输出共1行,一个整数,表示反转后的新数。 -1,000,000,000≤N≤1,000,000,000。 【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。 【法一】字符串处理 Var i,l,k:integer; s:string; p:boolean; begin assign(input, ''); reset(input); assign(output, ''); rewrite(output); readln(s); l:=length(s); k:=1; if s[1]='-' then begin write('-'); k:=2; end; p:=true;; for i:=l downto k do begin if(p)and((s[i]='0')) then continue else begin write(s[i]); p:=false;; end; end; close(input); close(output); end. 【法二】数字处理 Var f:integer; n,ans:longint; begin assign(input, ''); reset(input);

相关文档
相关文档 最新文档