bzoj1002 [FJOI2007]轮状病毒——找规律+高精度
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1002
打表找规律,似乎是这样:https://blog.csdn.net/fzhvampire/article/details/46389897
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
struct N{
int a[];
N(){memset(a,,sizeof a);}
}f[],ans;
N add(N x,N y)
{
N ret;
ret.a[]=max(x.a[],y.a[]);
for(int i=;i<=ret.a[];i++)
ret.a[i]=x.a[i]+y.a[i];
for(int i=;i<=ret.a[];i++)
{
int t=ret.a[i]/; ret.a[i]%=;
ret.a[i+]+=t;
}
if(ret.a[ret.a[]+])ret.a[]++;
return ret;
}
N pw(N x)
{
N ret;
ret.a[]=*x.a[];
for(int i=;i<=x.a[];i++)
for(int j=;j<=x.a[];j++)
ret.a[i+j-]+=x.a[i]*x.a[j];
for(int i=;i<=ret.a[];i++)
{
int t=ret.a[i]/; ret.a[i]%=;
ret.a[i+]+=t;
}
if(ret.a[ret.a[]+])ret.a[]++;
while(ret.a[ret.a[]]==&&ret.a[])ret.a[]--;
return ret;
}
void sub(int k)
{
ans.a[]-=k; int i=;
while(ans.a[i]<)ans.a[i]+=,ans.a[++i]--;
while(ans.a[ans.a[]]==&&ans.a[])ans.a[]--;
}
void print()
{
for(int i=ans.a[];i;i--)printf("%d",ans.a[i]);
}
int main()
{
scanf("%d",&n);
f[].a[]=; f[].a[]=;
f[].a[]=; f[].a[]=;
for(int i=;i<=n;i++)
f[i]=add(f[i-],f[i-]);
ans=pw(f[n]);
if(n%==)sub();
print();
return ;
}
还有大家都在说的结论:http://vfleaking.blog.163.com/blog/static/17480763420119685112649/
也就是:f[i] = ( f[i-1]*3 - f[i-2] + 2 )
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
struct N{
int a[];
// N(){memset(a,0,sizeof a);}
}f[],ans;
N sub(N x,N y)
{
x.a[]+=;
int j=;
while(x.a[j]>=){x.a[j]%=;x.a[j+]++;j++;}
for(int i=;i<=x.a[];i++)
{
x.a[i]-=y.a[i];
if(x.a[i]<)x.a[i]+=,x.a[i+]--;
}
// for(int i=1;i<=x.a[0];i++)
// if(x.a[i]<0)x.a[i]+=10,x.a[i+1]--;
while(x.a[x.a[]]==&&x.a[])x.a[]--;
return x;
}
//N add(N x,int k)
//{
// x.a[1]+=k; int i=1;
// while(x.a[i]>=10)x.a[i+1]+=x.a[i]/10,x.a[i]%=10,i++;
// if(x.a[x.a[0]+1])x.a[0]++;
// return x;
//}
N mul(N x,int k)
{
for(int i=;i<=x.a[];i++)x.a[i]*=k;
for(int i=;i<=x.a[];i++)
{
x.a[i+]+=x.a[i]/; x.a[i]%=;
}
if(x.a[x.a[]+])x.a[]++;
return x;
}
void print()
{
for(int i=f[n].a[];i;i--)printf("%d",f[n].a[i]);
}
int main()
{
scanf("%d",&n);
f[].a[]=; f[].a[]=;
f[].a[]=; f[].a[]=;
for(int i=;i<=n;i++)
{
// f[i]=mul(f[i-1],3);
// f[i]=sub(f[i],f[i-2]);
// f[i]=add(f[i],2);
f[i]=sub(mul(f[i-],),f[i-]);
}
print();
return ;
}
果然考场上还是打表找规律比较靠谱...
然而为什么,我的代码跑得好慢...
bzoj1002 [FJOI2007]轮状病毒——找规律+高精度的更多相关文章
- BZOJ1002:[FJOI2007]轮状病毒(找规律,递推)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...
- BZOJ [FJOI2007]轮状病毒 (找规律)
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6009 Solved: 3282[Submit][Statu ...
- [FJOI2007]轮状病毒 题解(dp(找规律)+高精度)
[FJOI2007]轮状病毒 题解(dp(找规律)+高精度) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1335733 没什么好说的,直接把规律找出来,有 ...
- BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】
BZOJ1002 FJOI2007 轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原 ...
- [bzoj1002][FJOI2007]轮状病毒_递推_高精度
轮状病毒 bzoj-1002 FJOI-2007 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2 ...
- 【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度
Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...
- 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...
- BZOJ 1002 FJOI2007 轮状病毒 递推+高精度
题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring& ...
- bzoj1002: [FJOI2007]轮状病毒(基尔霍夫矩阵)
1002: [FJOI2007]轮状病毒 题目:传送门 题解: 决定开始板刷的第一题... 看到这题的时候想:这不就是求有多少种最小生成树的方式吗? 不会啊!!!%题解... 什么鬼?基尔霍夫矩阵?? ...
随机推荐
- ContOS网络连接及简单的ssh Xshell连接!
这边简单的记录一下下ContOS网络连接及简单的ssh Xshell连接! 首先你得安装一个Contos Linux系统对吧! 1.找到设置--->网络-->有线连接-->IPv4 ...
- 详解如何设置CentOS 7开机自动获取IP地址
本例中以CentOS 7举例说明如何设置Linux开机自动获取IP地址和设置固定IP地址. 自动获取动态IP地址 1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有i ...
- nginx和php-fpm的启停和配置
一.nginx的启停 (1) 启动nginx /etc/init.d/nginx start (2) 停止nginx /etc/init.d/nginx stop (3) 重启nginx /etc/i ...
- ZOJ 2599 Graduated Lexicographical Ordering ★(数位DP)
题意 定义两个数的比较方法,各位数字之和大的数大,如果数字和相等则按字典序比较两个数的大小.输入n,k,求:1.数字k的排名:2.排名为k的数. 思路 算是一类经典的统计问题的拓展吧~ 先来看第一问. ...
- Linux命令nohup+screen 转
如果想在关闭ssh连接后刚才启动的程序继续运行怎么办,可以使用nohup.但是如果要求第二天来的时候,一开ssh,还能查看到昨天运行的程序的状态,然后继续工作,这时nohup是不行了,需要使用scre ...
- 【河南省第十一届ACM程序设计大赛-A】计划日
已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 输入 第一行: T 表示以下有T组测试数据 ...
- 【zznu-2060】 Minsum Plus(最小正子段和)
题目描述 题意简单到令人发指! 序列A由N个整数组成,从中选出一个连续的子序列,使得这个子序列的和为正数,且和为所有和大于零的子序列中的最小值. 将这个值输出,若无解,输出no solution. 输 ...
- Frequently-Used Network Time Server(Base On NTP:Network Time Protocol)
国家授时中心服务器 210.72.145.44 133.100.11.8 日本福冈大学 time-a.nist.gov 129.6 ...
- kibana安装
kibana,ELK中的K,主要为ES提供界面化操作,据说还是比较炫的,今天安装5.5.2版本进行尝试一把. 安装过程不难,简单的配置了一下端口和IP即可,难度不大. config下的kibana.y ...
- Composer介绍
Composer介绍 简单的说Composer就是一个PHP的组件包的依赖管理器.早年间PHP其实是有自己的包管理器的,叫PEAR.PEAR就介绍到这里,你只要知道这是一个狗屎一般的管理器就行了.在N ...