题目: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]轮状病毒——找规律+高精度的更多相关文章

  1. BZOJ1002:[FJOI2007]轮状病毒(找规律,递推)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  2. BZOJ [FJOI2007]轮状病毒 (找规律)

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6009  Solved: 3282[Submit][Statu ...

  3. [FJOI2007]轮状病毒 题解(dp(找规律)+高精度)

    [FJOI2007]轮状病毒 题解(dp(找规律)+高精度) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1335733 没什么好说的,直接把规律找出来,有 ...

  4. BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】

    BZOJ1002 FJOI2007 轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原 ...

  5. [bzoj1002][FJOI2007]轮状病毒_递推_高精度

    轮状病毒 bzoj-1002 FJOI-2007 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2 ...

  6. 【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度

    Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...

  7. 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度

    1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...

  8. BZOJ 1002 FJOI2007 轮状病毒 递推+高精度

    题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring& ...

  9. bzoj1002: [FJOI2007]轮状病毒(基尔霍夫矩阵)

    1002: [FJOI2007]轮状病毒 题目:传送门 题解: 决定开始板刷的第一题... 看到这题的时候想:这不就是求有多少种最小生成树的方式吗? 不会啊!!!%题解... 什么鬼?基尔霍夫矩阵?? ...

随机推荐

  1. VS2013 VC++的.cpp文件调用CUDA的.cu文件中的函数

    CUDA 8.0在函数的调用中方便的让人感动.以下是从网上学到的VC++的.cpp文件调用CUDA的.cu文件中的函数方法,和一般的VC++函数调用的方法基本没差别. 使用的CUDA版本为CUDA 8 ...

  2. UVA-11294 Wedding (2-SAT)

    题目大意:一张长桌,n对夫妻,编号为0~n,这些人要坐在长桌两侧,每对夫妻不能坐在同一侧.其中,有2*m个人相互讨厌,编号为0的夫妻中的妻子不愿意让对面那一侧中有两个相互吵过架的人,找一种排座位方案. ...

  3. 【Error】local variable 'xxx' referenced before assignment

    此种错误涉及到变量的作用域,即全局变量和局部变量的操作. 总结如下: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局 ...

  4. Highcharts 3D柱形图;Highcharts 堆叠3D柱形图;Highcharts 3D饼图;Highcharts 3D圆环图

    Highcharts 3D柱形图 配置 chart.options3d 配置 以下列出了 3D 图的基本配置,设置 chart 的 type 属性为 column,options3d 选项可设置三维效 ...

  5. 上下行分流下行负载方式和能ping通但不能打开

    1 下行线路负载方式选择  目的端口+协议  否则有可能出现微信443端口图片打不开的情况. 2.彭ping通但是打不开的情况下将上行线路mtu值改小 由1500改为1450

  6. yyyy-MM-dd EEE hh:mm:ss(日期转换)

    <script> /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) ...

  7. SQL SERVER 导入、导出数据到Exce(使用OpenRowset,、OpenDataSource函数)以及访问远程数据库(openrowset/opendatasource/openquery)

    启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务不安 ...

  8. powershell -enc参数无法解码base64编码payload的解决方案

    powershell的-enc参数允许传入一个base64编码过的powershell脚本字符串作为参数来执行该powershell脚本,该方法常被用于绕过杀毒软件的主动防御机制. 今天下午在做一个后 ...

  9. selected多次点击不生效

    表单下拉选项使用selected设置选中时,发现第一次默认选中成功,在页面不刷新的情况下操作(比如ajax),虽然selected属性设置了,但是默认选中不生效. 解决办法1 可能是浏览器缓存问题,在 ...

  10. Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结

    知识背景: 210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式.英语叫做IPv4 numbers-and-dots notation. 如果把210.25.132.181转换 ...