【BZOJ】1002: [FJOI2007]轮状病毒(DP+规律+高精度)
http://www.lydsy.com/JudgeOnline/problem.php?id=1002
其实我还是看题解的,而且看了题解也没明白那公式怎么来的T_T,先水过了先把。。。。以后研究一下这个矩阵。
以后要看:周冬《生成树的计数及其应用》,http://vfleaking.blog.163.com/blog/static/17480763420119685112649/
答案是f[i]=f[i-1]*3-f[i-2]+2
要用高精度,(这货以后好好写啊,卡了我好久调试
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define for1(i,a,n) for(i=a;i<=n;++i)
#define for2(i,a,n) for(i=a;i<n;++i)
#define for3(i,a,n) for(i=a;i>=n;--i)
#define for4(i,a,n) for(i=a;i>n;--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define read(a) scanf("%d", &a)
#define print(a) printf("%d", a); struct bignum {
int d[10000];
}f[105]; bignum mul(bignum a, const int &k) {
for(int i=1; i<=a.d[0]; ++i) a.d[i]*=k;
for(int i=1; i<=a.d[0]; ++i)
a.d[i+1]+=a.d[i]/10, a.d[i]%=10;
if(a.d[a.d[0]+1]) ++a.d[0];
return a;
}
bignum minus(bignum a, const bignum &b) {
a.d[1]+=2; int j=1;
while(a.d[j]>=10) a.d[j]%=10, a.d[++j]++;
for(int i=1; i<=a.d[0]; ++i) {
a.d[i]-=b.d[i];
while(a.d[i]<0) a.d[i]+=10, --a.d[i+1];
}
while(!a.d[a.d[0]]) --a.d[0];
return a;
}
bignum plus(bignum a, const int &k) {
a.d[1]+=k; int i=1;
while(a.d[i]>=10) a.d[i+1]+=a.d[i]/10, a.d[i]%=10;
if(a.d[a.d[0]+1]) ++a.d[0];
return a;
} int main() {
int n;
read(n);
f[1].d[1]=1; f[2].d[1]=5;
f[1].d[0]=f[2].d[0]=1;
int i;
for1(i, 3, n)
f[i]=minus(mul(f[i-1], 3), f[i-2]);
for3(i, f[n].d[0], 1) printf("%d", f[n].d[i]);
return 0;
}
Description
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
Input
第一行有1个正整数n。
Output
将编程计算出的不同的n轮状病毒数输出
Sample Input
Sample Output
HINT
Source
【BZOJ】1002: [FJOI2007]轮状病毒(DP+规律+高精度)的更多相关文章
- BZOJ 1002 FJOI2007 轮状病毒 递推+高精度
题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring& ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...
- BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5577 Solved: 3031[Submit][Statu ...
- 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3928 Solved: 2154[Submit][Statu ...
- BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3106 Solved: 1724[Submit][Statu ...
- bzoj1002 [FJOI2007]轮状病毒——找规律+高精度
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 打表找规律,似乎是这样:https://blog.csdn.net/fzhvampir ...
- bzoj 1002 [FJOI2007]轮状病毒——打表找规律
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 看 Zinn 的博客:https://www.cnblogs.com/Zinn/p/9 ...
- 【刷题】BZOJ 1002 [FJOI2007]轮状病毒
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...
- BZOJ [FJOI2007]轮状病毒 (找规律)
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6009 Solved: 3282[Submit][Statu ...
随机推荐
- Dynamo和Bigtable对比
数据结构化问题 首先要提到的是两者存储数据属性上的区别,虽然两者都是以key/value形式进行存储,但Dynamo偏向存储原数据,因为其所存储的数据是非结构化数据,对value的解析完 ...
- 一些Linux的路径
系统引导时启动 /etc/rc.d/rc.local
- sublime text多文件夹查找关键字
Ctrl+shift+F 快捷键在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找 转自:http://www.douban.com/note/362268947/
- Java 7 的7个新特性
1.对集合类的语言支持:(??) 2.自动资源管理: 3.改进的通用实例创建类型推断:(??) 4.数字字面量下划线支持:(√) 5.switch中使用string:(√) 6.二进制字面量:(√) ...
- Android drawable的自动缩放
今天在写程序时发现,一张图片被自动放大了,后来发现,这张图片放在了drawable-zh文件夹下,这个文件夹没有指定屏幕密度!于是将drawable-zh改为drawable-zh-nodpi,问题解 ...
- UESTC 1215 (思维题 旋转)
Secrete Master Plan Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Othe ...
- ASP.Net核心对象之HttpResponse
简介: HttpResponse是对响应报文进行设置的一个对象.通过context. Response 能够得到HttpResponse对象. context.Response.Charset;//获 ...
- Ubuntu配置java环境变量
参考文章: http://www.cnblogs.com/BigIdiot/archive/2012/03/26/2417547.html 方法1:修改/etc/profile 文件所有用户的 she ...
- ytu 1985:C语言实验——保留字母(水题)
C语言实验——保留字母 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 136 Solved: 59[Submit][Status][Web Board] ...
- 网页中meta标记
网页中常常看见有这样的标记,他们是清浏览器缓存用的 <meta http-equiv="> PS:清除浏览器中的缓存,它和其它几句合起来用,就可以使你再次进入曾经访问过的页 ...