NOIP模拟试题

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

全国信息学奥林匹克联赛(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

【输入输出样例2】【数据范围】

30%的数据满足1≤l ≤100;100%的数据满足1≤l ≤10000。

2.苹果二叉树

(apple apple.pas/c/cpp)

.pas/c/cpp)【问题描述】

设想苹果树很象二叉树,每一枝都是生出两个分支。我们用自然数来数这些枝和根那么必须区分不同的枝(结点),假定树根编号都是定为1,并且所用的自然数为1到N 。N 为所有根和枝的总数。例如下图的N 为5,它是有4条枝的树。

25\/34\/1当一棵树太多枝条时,采摘苹果是不方便的。所以我们要对一棵苹果树进行剪枝,以摘取苹果。显然我们在剪枝时不能连根拔起。现在我们关心的是,剪枝时,如何令损失的苹果最少。

给定苹果树上每条枝的苹果数目,及必须保留的树枝的数目。你的任务是计算剪枝后,能保留多少苹果。【输入】

输入文件名为apple.in 。

第一行为N,Q ,分别代表一棵树上的根和枝的编号总数和要保留的树枝的数目。接下来N-1行为每条树枝的描述。每行有3个空格隔开的整数,前2个数为树枝两端的编号,第三个数为该枝上的苹果数。假设每条枝上的苹果数不超过3000个。【输出】

输出文件名为apple.out 。一个正整数表示能保留的苹果树。【输入输出样例】cell cell.in .in cell.out AAAAA AAA

1

apple apple.in

.in apple.out

【数据范围】

30%的数据满足1≤Q ≤20,1<N ≤50;100%的数据满足1≤Q <N ≤100。

3.青蛙王子的口令

(order order.pas/c/cpp)

.pas/c/cpp)【问题描述】

青蛙王子命令它的N 个小青蛙围成一圈,每只青蛙都刚好面对前一只青蛙的后背。每只小青蛙都有一个唯一的ID ,从1到N 。青蛙的排列可以描述为一个ID 序列。这个序列总是从1开始,然后是它前面的青蛙的ID ,再前后面的青蛙,一直到最后一只青蛙(就是ID1的后面那只)。一只青蛙如果跳过了它前面的那只青蛙,使得他们的位置发生对调,我们认为是一次单跳。如果青蛙的ID 序列是154326,ID 为2的青蛙进行了2次单跳,那么序列就变为125436(该青蛙往前移动了两个位置)。当青蛙王子说数字B 时,编号为B 的青蛙就需要进行B 次单跳。青蛙王子希望通过若干次口令,使得初始序列变为它想要的序列。给出一个初始序列和最终的序列(青蛙王子希望的序列),编程计算出青蛙王子的口令序列,使得小青蛙们从开始的序列变为结果序列。初始序列和结果序列是不同的。【输入】

输入文件名为order.in ,共3行。

第1行为1个正整数N ,表示小青蛙的数目第2行包含N 个正整数,表示初始序列第3行也包含N 个正整数,表示结果序列【输出】

输出文件名为order.out 。

若干行,每行一个数字,表示青蛙王子的口令序列【输入输出样例】【数据范围】

30%的数据满足3≤N ≤30;100%的数据满足3≤N ≤100。

测试数据保证有解且输出命令条数不超过100000条。

521311410232035

20

21

order order.in .in order.out 5

1532415423

5352

相关文档
最新文档