NOIP模拟试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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