信息学试题无奖竞答

idler 2001-08-27 12:22:40
加精
题目:Red Virus

最近发现一种新病毒,因为其蔓延速度与最近在Internet上传播的“红色代码”不相上下,所以被称作“红色病毒”。经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶、腺嘌呤均是成对出现的。为了搞清楚该病毒的特征,你要对此做出研究。你要得到的是在这个特征下,可能成为病毒的DNA单链序列的个数。更精确的说,你要统计所有满足下列条件的长度为n的字符串的个数:
1.字符串仅右A,T,C,G组成。
2.A出现偶数次,或者不出现。
3.C出现偶数次,或者不出现。
例如,当n=2时,满足条件的字符串有如下6个:
TT,TG,GT,CG,AA,CC。
这个数可能非常大,所以只需输出最后两位数字。

输入:
redvirus.in
输入文件每行给出一个n,1<=n<=10^9,最后以0结束。

输出:
对每个n,输出满足条件的字符串个数的最后两位数字。

输入样例:
1
2
3
100
0

输出样例:
2
6
20
32

限时:
每个n限时5秒。

注意:n的取值很大,不能直接使用递推法。
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
idler 2001-08-27
  • 打赏
  • 举报
回复
下面是解题思路:


f(i) 字符串长度为i时,A,C的个数都为偶数的字符串的个数。 (A)
g(i) 字符串长度为i时,A,C的个数都为奇数的字符串的个数。 (B)
h(i) 字符串长度为i时,A,C的个数一个为奇数,另一个为偶数的字符串的个数。 (C)
显然,有:
f(i)+g(i)+h(i)=4^i (1)

根据题意,有
f(1)=2 g(1)=0 h(1)=2

递推:
i) n=1时,f(1)=1,g(1)=0,h(1)=2
ii)
n=n+1时,有
f(n)=f(n-1)*2+h(n-1)
g(n)=g(n-1)*2+h(n-1)
解释如下:
任意一个长度为n-1的、符合条件(A)的字符串加上一个T或者G即可构成一个长度为n的、符合条件(A)的字符串。所以有f(n-1)*2。
任意一个长度为n-1的、符合条件(B)的字符串加上A,C中个数为奇数的字符集可构成一个长度为n的、符合条件(A)的字符串。所以有h(n-1)。
g(n)的构造方法也一样。
由(1)得
h(n)=4^n-f(n)-g(n)
所以
h(n)=4^n-f(n-1)*2-g(n-1)*2-h(n-1)*2
=4^n-2*(f(n-1)+g(n-1)+h(n-1))
=4^n-2*4^(n-1)
=2*4^(n-1)
代入,得
f(n)=f(n-1)*2+2*4^(n-2)
=2f(n-1)+2^(2n-3)
f(n+1)=2f(n)+2^(2n-1)
为a(n+1)=pa(n)+q(n)形式的递推式,求通项公式,得
f(n)=2^n+2^(2n-2)-2^(n-1)
=2^(n-1)+2^(2n-2)

将2^k的后两位val(k)列表
k 1 2 3 4 5 6 7 8 9 10
val 02 04 08 16 32 64 28 56 12 24
k 11 12 13 14 15 16 17 18 19 20
val 48 96 92 84 68 36 72 44 88 76
k 21 22
val 52 04
因为val(k)=2*val(k-1) mod 100,又因为val(2)=val(22),所以val的值在val(2)以后以20为周期循环。
所以,有
val(1)=2
val(k)=val((k-2) mod 20+2) (k>1)

实现:
CONST
pow2 : array [ 2 .. 21 ] of byte = (
4, 8, 16, 32, 64, 28, 56, 12, 24,
48, 96, 92, 84, 68, 36, 72, 44,
88, 76, 52 );

Function pow_two( n : longint ) : byte { 计算2^n的后两位 }
Begin
if n = 1 then
begin
pow_two := 2;
exit;
end;
pow_two := pow2[ ( n - 2 ) mod 20 + 2 ];
End;

然后根据上述公式计算即可。

唉,为什么当时没有想到呢?!
idler 2001-08-27
  • 打赏
  • 举报
回复
Zig兄:你有比赛的测试数据吗?寄给老弟一份,谢谢!
fangjh@citiz.net
Iong 2001-08-27
  • 打赏
  • 举报
回复
Zig,show me!
email:yongbis@sina.com
Zig 2001-08-27
  • 打赏
  • 举报
回复
forgot to say.
f(n)=f(n+20)
Zig 2001-08-27
  • 打赏
  • 举报
回复
SH-samsung Problem C
The answer is 2^2(n-1)+2^(n-1)
This formula is from f(n)=4^(n-2)*2+f(n-1)
Do you need test data and standard program?
第17课 教材分析: 本课主要是让学生了解计算机病毒的危害性,知道它的产生及传播途径,正确对待计算 机病毒,了解计算机杀毒软件,学会自我保护的方法。通过学习,要加强学生的计算机 信息安全和软件保护意识 教学目标: 知识目标: 1.什么是计算机病毒? 2. 计算机病毒的产生、传播过程。 3. 如何预防计算机病毒? 技能目标: 1. 学会使用杀毒软件。 2. 学会预防计算机病毒的方法(杀毒、使用正版、安装软件、备份等)。 情感目标: 通过学习,学生能自觉遵守计算机信息安全和软件保护等条例。 教学重难点: 教学重点: 1. 什么是计算机病毒? 2. 计算机病毒的产生、传播过程。 3. 如何预防计算机病毒。 4. 计算机信息安全和软件保护的学习。 教学难点: 1.认识计算机病毒。 2. 正确使用杀毒软件。 3. 如何加强学生的计算机信息安全和软件保护的意识。 课前准备:windows xp系统、杀毒软件。 教学设备:机房 教学课时:1课时 教学过程: 教师活动 1、同学们平时在使用电脑的过程中是否遇到过病毒? 2、这节课我们就来学习关于病毒的一些知识,首先来看一则flash (播放flash:小胖vs电脑病毒) 1、 看了这则flash,大家有什么想法? 2、 flash中的小胖是怎么对待电脑病毒的? 3、 我们同学在使用电脑过程中,如果遇上病毒了是怎么解决的呢? 4、 看来同学们家里都很有钱,电脑中病毒了换一台就好了,你们的方法都是正确的,但是 也是不可取的,下面让同学们从书上、网上以及老师放在你们桌面上的资料里了解一下 病毒,在看资料的同时找出下面四个问题的答案: (1) 什么是电脑病毒 (2) 病毒的特征 (3) 病毒的传播方式 (4) 怎么预防病毒 5、 学生回答 6、 计算机病毒知识竞答 7、 小结:flash电脑病毒的自白 8、 看了病毒的自述,我们知道,其实计算机病毒并不可怕,大家回去可以为你的电脑做一 次全身检查 学生活动 是 笑 我要饿死它们 找电脑公司 重装系统 换主机.. 指编制者在计算机程序中插入的破坏计算机功能或者数据,影响计算机使用并且能够自 我复制的一组计算机指令或者程序代码。 传染性、寄生性、隐蔽性、触发性、破坏性 网络,u盘,光盘 防火墙 课堂点评 flash:小胖对付熊猫烧香病毒:拔插头;我要饿死它们 学生积极性很高 回答比较积极 课堂活跃 ----------------------- 计算机病毒-教学设计全文共4页,当前为第1页。 计算机病毒-教学设计全文共4页,当前为第2页。 计算机病毒-教学设计全文共4页,当前为第3页。 计算机病毒-教学设计全文共4页,当前为第4页。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧