病毒扩散
来源:互联网 发布:知堂回想录 pdf 编辑:程序博客网 时间:2024/05/01 04:50
【题目描述】
一开始,病人D的体内只有一个K病毒。但是病毒是会繁殖的,每小时后一个K病毒会“分身术”,变成3个K病毒和一个L病毒,而一个L病毒会变成4个L病毒。
如图所示,红色圆圈表示K病毒,蓝色圆圈表示L病毒。
现在医生要知道,K小时后,第x到y行一共有多少个K病毒?
【输入格式】
输入有多行(最多1000行),每行三个整数,分别是K,x和y
【输出格式】
K小时后第x到y行一共有多少个K病毒
【样例输入】
3 3 7
【样例输出】
14
【数据范围】
0<=K<=30
1<=x<=y<=2^k
【分析】
设f[k,i]表示K小时后最上面i行的K病毒总数,g[k,i]表示K小时后最下面i行的K病毒总数,则所求答案为f[k,y]-f[k,a-1]
如果i>=2^(k-1),则g[k,i]=2g[k-1,i-2^(k-1)]+c[k]),否则g[k,i]=g[k-1,i]。其中c[k]表示3^k
f的求解可以参考g数组,此处不再详细说明。
var k,a,b:longint;function c(x:longint):qword;begin if x=0 then exit(1) else exit(c(x-1)*3);end;function f(k,i:longint):qword;var k2:qword;begin if i=0 then exit(0); if k=0 then exit(1); k2:=1 shl (k-1); if i>=k2 then exit(f(k-1,i-k2)+c(k-1)*2) else exit(f(k-1,i)*2);end;function g(k,i:longint):qword;var k2:qword;begin if i=0 then exit(0); if k=0 then exit(1); k2:=1 shl (k-1); if i>=k2 then exit(g(k-1,i-k2)+c(k-1)) else exit(g(k-1,i));end;begin while not eof do begin readln(k,a,b); writeln(f(k,b)-f(k,a-1)); end;end.
3 0
- 病毒扩散
- 如何让应用像病毒一样扩散
- 关于病毒扩散与传播的控制模型
- 第五次作业病毒扩散模型NO.3
- Atitit.病毒木马程序的感染 传播扩散 原理
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
- 各向异性扩散
- 各向异性扩散
- 病毒
- 病毒
- 病毒
- 病毒
- 病毒
- 病毒
- 病毒
- ???????病毒
- 病毒
- 病毒
- Unity3D使用Animation编辑器编辑动画
- 微软老毛病还没改:Win10版本多达七个 咋选?
- C++ 日志 log
- 南阳oj 215 Sum
- 今天还是下雨了
- 病毒扩散
- CF不能打开写入的文件
- 十年来感受的前端技术变化(转载 徐飞 Teambition前端架构师)
- S/4HANA表现抢眼——第一季度SAP大中华区营收再现双位数增长
- 通俗易懂理解Java回调机制
- 【LintCode】打劫房屋
- 【模板】高精度 加减乘 重载法
- C++ 基于TCP通讯的即时通信服务器DEMO
- 【猿题库】软工机试