【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
1002: [FJOI2007]轮状病毒
Description
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
Input
第一行有1个正整数n。
Output
将编程计算出的不同的n轮状病毒数输出
Sample Input
Sample Output
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include<stack>
#include<set>
using namespace std;
#define rep0(i,l,r) for(int i = (l);i < (r);i++)
#define rep1(i,l,r) for(int i = (l);i <= (r);i++)
#define rep_0(i,r,l) for(int i = (r);i > (l);i--)
#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
#define MS0(a) memset(a,0,sizeof(a))
#define MS1(a) memset(a,-1,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l, m, rt << 1
#define rson m+1, r, rt << 1|1
//typedef __int64 ll;
template<typename T>
void read1(T &m)
{
T x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
m = x*f;
}
template<typename T>
void read2(T &a,T &b){read1(a);read1(b);}
template<typename T>
void read3(T &a,T &b,T &c){read1(a);read1(b);read1(c);}
template<typename T>
void out(T a)
{
if(a>) out(a/);
putchar(a%+'');
}
const int maxl = ;
const int ten[]={,,,,};
struct Biginter{
int d[maxl]; // 最大数位只取四位,因为相乘不会爆int~~,并且每次构造对象时d[]一定要为0;
Biginter(char *s){
int len = strlen(s);
d[] = (len-)/+;//每一个数组里面存四位,并且d[0]记录的是最多总的位数(下标)
int i,j,k;
for(i = ;i <= d[];i++) d[i] = ;
for(i = len-;i >= ;i--){
j = (len--i)/+; //保存的下标;
k = (len--i)%;//在每一个下标保存中仍然要保存顺序;
d[j] += ten[k]*(s[i]-'');
}
while(d[] > && d[d[]] == ) d[]--; //可能就为0;
}
Biginter(){MS0(d);}//手动初始化为0
void tostring(){ //输出后换行
out(d[d[]]);
for(int i = d[]-;i > ;i--){
printf("%04d",d[i]);
}
puts("");
}
};
bool operator <(const Biginter& a,const Biginter& b)
{
if(a.d[] != b.d[]) return a.d[] < b.d[];
for(int i = a.d[];i >= ;i--){
if(a.d[i] != b.d[i]) return a.d[i] < b.d[i];
}
return false;// a== b
}
bool operator ==(const Biginter& a,const Biginter& b)
{
if(a.d[] != b.d[]) return false;
for(int i = a.d[];i >= ;i--){
if(a.d[i] != b.d[i]) return false;
}
return true;
}
Biginter operator +(const Biginter& a,const Biginter& b)
{
Biginter c;
c.d[] = max(a.d[],b.d[]);
for(int i = ;i <= c.d[];i++){
c.d[i] += a.d[i]+b.d[i];
if(c.d[i] >= ten[]){//其实每次只需要看是否要进1即可;
c.d[i] -= ten[],c.d[i+]++;
if(i == c.d[]){
++c.d[];
break;
}
}
}
return c;
}
Biginter operator -(const Biginter& a,const Biginter& b){
Biginter c;
c.d[] = a.d[];
for(int i = ;i <= c.d[];i++){
c.d[i] += a.d[i] - b.d[i];
if(c.d[i] < ){
c.d[i] += ten[];
c.d[i+]--;
}
}
while(c.d[] > && c.d[c.d[]] == ) c.d[]--;
return c;
}
Biginter operator *(const Biginter& a,const Biginter& b)
{
Biginter c;
c.d[] = a.d[]+b.d[];
for(int i = ;i <= a.d[];i++){
int x = ;
for(int j = ;j <= b.d[];j++){
x += a.d[i]*b.d[j]+c.d[i+j-];
c.d[i+j-] = x%ten[];//相乘时需要记录超出多少需要mod,但相加减时超出数值就是1~~不用mod更快
x /= ten[];
}
c.d[i+b.d[]] = x;//***
}
while(c.d[] > && c.d[c.d[]] == ) c.d[]--;
return c;
}
int main()
{
Biginter F[]={"","",""},F3(""),F2("");
rep1(i,,)
F[i] = F[i-]*F3 - F[i-] + F2;
int n;
while(scanf("%d",&n) == ){
F[n].tostring();
}
return ;
}
【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度的更多相关文章
- BZOJ 1002 FJOI2007 轮状病毒 递推+高精度
题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring& ...
- 【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度
Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- 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: 3106 Solved: 1724[Submit][Statu ...
- 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3928 Solved: 2154[Submit][Statu ...
- 【刷题】BZOJ 1002 [FJOI2007]轮状病毒
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...
- bzoj 1002 [FJOI2007]轮状病毒——打表找规律
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1002 看 Zinn 的博客:https://www.cnblogs.com/Zinn/p/9 ...
- 1002: [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2609 Solved: 1450[Submit][Statu ...
随机推荐
- ADO.Net的小知识(连接数据库)
数据库连接分为两种,分别是断开式连接和打开式连接.下面分别和大家分享一下断开时连接的查询: (1)引入命名空间:using System.Data.SqlClient; 该语句用于导入和ADO.Net ...
- Mysql数据库导入命令Source详解
Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...
- endif、endforeach
<?php if ($a == 5): ?> <div>等于5</div><?php elseif ($a == 6): ?> <div> ...
- 用eclipse javaEE编程时,不管什么程序都会出现这个错误[SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:bookstore' did not find
用eclipse javaEE编程时,不管什么程序都会出现这个错误[SetContextPropertiesRule]{Context} Setting property 'source' to 'o ...
- Js解析json
var sysModule=[]; var treeJson = <%=(sysModule) %>; if (treeJson.length ...
- 我的第一篇——nginx+naxsi总结篇1
今天是我正式在Linux下安装nginx的第一天吧,搜索,查看,安装,这之间肯定是或多或少的遇到了很多的问题,不管是大的还是小的,都应该记录下来,或许以后还会用到,或许会帮到其他人. 首先,先说一下, ...
- 微信、微博、qq图标服务实现
实现原理:变化前的图标和变化后的图标在一张图片上,用这张图片作为背景,通过定义背景的位置来实现显示哪个图标,其中还带着滑动的动画效果. <!DOCTYPE html> <html l ...
- javascript优化工具 Doloto
Doloto是“Download Time Optimizer”的简写.官方页面上说它对于大型复杂的AJAX应用尤其的有用,因为这些应用包含了大量的 JavaScript 代码.简单的说,它的工作原理 ...
- wireshark的ubuntu更新ppa源
默认的ppa源安装的是1.8.3的,这个源直接更新到1.11.0 $ sudo add-apt-repository ppa:dreibh/ppa $ sudo apt-get update $ su ...
- php中的作用域
在php中分为局部变量.全局变量和静态变量: 局部变量就是在函数体内声明的变量,例子: <?php //作用域 $a=5; function show($b){ $a=$b;//相当于 ...