[BZOJ1002][FJOI2007]轮状病毒(打表找规律+高精度||结论)
2016-05-17 19:54
501 查看
题目描述
传送门题解
根据基尔霍夫矩阵(我也不知道是什么)推出f[i]=(f[i-1]*3-f[i-2]+2)。然而这道题可以打表找规律,具体见http://blog.csdn.net/jiangshibiao/article/details/22645557
代码
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n; struct hp{int a[110];}; hp f[110],t1,t2; inline void cheng(hp &ans,hp now) { ans.a[0]=now.a[0]; for (int i=1;i<=now.a[0];++i) ans.a[i]=now.a[i]*3; for (int i=1;i<=ans.a[0];++i) { ans.a[i+1]+=ans.a[i]/10; ans.a[i]%=10; } while (ans.a[ans.a[0]+1]>0) { ans.a[ans.a[0]+1]+=ans.a[ans.a[0]]/10; ans.a[ans.a[0]]%=10; ans.a[0]++; } } inline void jian(hp &ans,hp now1,hp now2) { ans.a[0]=now1.a[0]; for (int i=1;i<=now1.a[0];++i) { if (now1.a[i]<now2.a[i]) { now1.a[i+1]--; now1.a[i]+=10; } ans.a[i]=now1.a[i]-now2.a[i]; } while (!ans.a[ans.a[0]]) ans.a[0]--; } inline void jia(hp &ans,hp now) { for (int i=0;i<=now.a[0];++i) ans.a[i]=now.a[i]; ans.a[1]+=2; for (int i=1;i<=ans.a[0];++i) { ans.a[i+1]+=ans.a[i]/10; ans.a[i]%=10; } if (ans.a[ans.a[0]+1]>0) ans.a[0]++; } int main() { scanf("%d",&n); f[1].a[0]=1; f[1].a[1]=1; f[2].a[0]=1; f[2].a[1]=5; for (int i=3;i<=n;++i) { memset(t1.a,0,sizeof(t1.a)); memset(t2.a,0,sizeof(t2.a)); cheng(t1,f[i-1]); jian(t2,t1,f[i-2]); jia(f[i],t2); } for (int i=f .a[0];i>=1;--i) printf("%d",f .a[i]); putchar('\n'); }
总结
打表大发好!其实刚开始没想到打表,看了结论之后发现不会就直接敲高精了。
规律也不是完全发现不了。
其实考试的时候可能没有几个人知道这个结论,那么以后要想一想怎么得分。
相关文章推荐
- 【bzoj1618】【Usaco2008 Nov]】Buying Hay 购买干草
- RIP、OSPF、BGP三种协议
- Ubuntu下Chrome造成系统假死的解决方法
- Docker 学习日志 (二)
- BZOJ -1864: [Zjoi2006]三色二叉树
- 算是学完了《Servlet&JSP学习笔记》,立此存照
- IOS学习之初识KVO
- SQL索引一步到位
- git命令每次提交都要输入用户名和密码的解决办法(git push origin master)
- 2016SDAU编程练习三1018
- 数据库学习之旅——实验3(1)
- MapReduce应用实例
- 自己想做的
- 系统优化
- iOS_UITextField整理
- 在ubuntu下编译ijkplayer-android
- 指针和链条
- 树莓派使用花生壳(内网版)攻略
- M % (M + 1) = ???(dp+数学)(北理16校赛)
- (Paper)Robust Text Detection in Natural Scene Images