Bzoj2656 [Zjoi2012]数列(sequence)
Submit: 1448 Solved: 762
[Submit][Status][Discuss]
Description
小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式:
小白作为一个数学爱好者,很快就计算出了这个数列的通项公式。于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来。于是小白为了向小蓝证明自己的确做出来了此题以达到其炫耀的目的,想出了一个绝妙的方法:即让小蓝说一个正整数N,小白则说出 的值,如果当N很大时小白仍能很快的说出正确答案,这就说明小白的确得到了公式。但这个方法有一个很大的漏洞:小蓝自己不会做,没法验证小白的答案是否正确。作为小蓝的好友,你能帮帮小蓝吗?
Input
输入文件第一行有且只有一个正整数T,表示测试数据的组数。
第2~T+1行,每行一个非负整数N。
Output
输出文件共包含T行。
第i行应包含一个不含多余前缀0的数,它的值应等于An(n为输入数据中第i+1行被读入的整数)
【样例输入】
Sample Input
1
3
10
Sample Output
2
3
HINT
T<=20,N<=10^100
Source
递归+高精度
暴力递归只能解决10^8的问题
↑优化高精度无果之后,觉得应该可以找规律。
发现算奇数的时候,下面的偶数都算过了。
那么加个类似记忆化的东西就行
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<vector> 8 #define LL long long 9 using namespace std; 10 const int mxn=305; 11 int read(){ 12 int x=0,f=1;char ch=getchar(); 13 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 14 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 15 return x*f; 16 } 17 struct NUM{ 18 int len; 19 int a[mxn]; 20 friend NUM operator + (NUM a,NUM b){ 21 a.len=max(a.len,b.len); 22 for(int i=1;i<=a.len;i++){ 23 a.a[i]+=b.a[i]; 24 if(a.a[i]>9){ 25 a.a[i+1]+=a.a[i]/10; 26 a.a[i]%=10; 27 } 28 } 29 if(a.a[a.len+1])a.len++; 30 return a; 31 } 32 friend NUM operator / (NUM a,int b){ 33 for(int i=a.len;i;i--){ 34 a.a[i-1]+=(a.a[i]%b)*10; 35 a.a[i]/=b; 36 } 37 while(a.len>1 && !a.a[a.len]) a.len--; 38 return a; 39 } 40 }N,p,q; 41 void Debug(NUM x){ 42 for(int i=x.len;i;i--) 43 printf("%d",x.a[i]); 44 printf("\n"); 45 return; 46 } 47 void calc(NUM x){ 48 // NUM tmp; 49 if(x.len==1 && x.a[1]==1){ 50 p=x; 51 q.len=1;memset(q.a,0,sizeof q.a); 52 q.a[1]=1; 53 return; 54 } 55 calc(x/2); 56 if(x.a[1]&1)p=p+q; 57 else q=q+p; 58 // return tmp; 59 } 60 char s[mxn]; 61 int T; 62 int main(){ 63 // freopen("sequence.in","r",stdin); 64 // freopen("sequence.out","w",stdout); 65 T=read(); 66 int i,j; 67 p.len=1;p.a[1]=1; 68 q.len=1;q.a[1]=0; 69 while(T--){ 70 memset(N.a,0,sizeof N.a); 71 // 72 scanf("%s",s+1); 73 int len=strlen(s+1); 74 for(i=1;i<=len;i++){ 75 N.a[i]=s[len-i+1]-'0'; 76 } 77 N.len=len; 78 calc(N); 79 Debug(p); 80 } 81 return 0; 82 }
转载于:https://www.cnblogs.com/SilverNebula/p/6441684.html
Bzoj2656 [Zjoi2012]数列(sequence)相关推荐
- bzoj 2656: [Zjoi2012]数列(sequence)(简单高精度模板2.0)
2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec Memory Limit: 128 MB Submit: 1663 Solved: 860 [Subm ...
- 2656: [Zjoi2012]数列(sequence)(递归+高精度)
好久没写题了T T NOIP 期中考双血崩 显然f(x)=f(x>>1)+f((x>>1)+1),考虑每次往x>>1递归,求出f(x),复杂度O(logN) 我们设 ...
- [ZJOI2012]数列
超级水的题还wa了一次 首先很容易发现其实就只有两个值并存 然后 要注意把数组初始化啊...可能后面有多余的元素(对拍的时候由于从小到大就没跑出错) #include <bits/stdc++. ...
- 2019.4.summary
2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...
- 5347 Problem D 数列-训练套题T10T3
问题 D: 数列-训练套题T10T3 时间限制: 4 Sec 内存限制: 128 MB 提交: 40 解决: 4 题目描述 数列(sequence.pas/c/cpp) 问题描述 一个简单的数列问 ...
- Python实现数列的单调有界定理
Python实现数列的单调有界定理 数列是数学中一个重要的概念,在实际问题中也经常会遇到.其中,单调有界定理是指任何一个无穷递增数列必定有上界,任何一个无穷递减数列必定有下界.下面,我们将使用Pyth ...
- [翻译] 数学翻译词汇
初等数学 elementary mathematics 高等数学 higher mathematics 现代数学 modern mathematics 基础代数 basic mathemat ...
- 7月清北学堂培训 Day 1
基础算法 1. 模拟算法 面向测试算法 模拟算法的关键就是将人类语言翻译成机器语言. 要做到以下两点: 1.优秀的读题能力: 2.优秀的代码能力: 程序流程图: 读入,循环处理指令,输出: 读题是很重 ...
- 普通高中课程标准实验教科书(必修)数学5_学习笔记
1.解三角形 1.1.正弦定理和余弦定理 正弦定理 对任意△ABC中,有如下等式成立: a sin A = b sin B = c sin C \frac{a}{\sin{A}}=\fra ...
最新文章
- 图像去雾----暗通道
- JVM内存参数详解以及配置调优
- 火狐表格错乱兼容性问题
- 【CodeForces - 1020B】Badge(模拟,图,环)
- 基于JAVA+SpringMVC+Mybatis+MYSQL的校园二手市场系统
- Windows2008+MyEclipse10+Android开发环境搭配
- linux重启网络服务后什么端口都不通,linux的端口不通怎么解决
- Oracle创建约束语句,约束 comment 创建语句
- JAVA酒店管理系统
- redhat7安装谷歌浏览器 换源
- 南京绿溢大厦远程预付费系统项目的设计与应用-安科瑞耿敏花
- QTcpSocket使用发现的问题
- nodejs爬虫获取漫威超级英雄电影海报
- 如何将英文句子分词(拆分单词), 并判断分词是否为英文单词
- win10蓝屏提示重新启动_关于网传0x000000F4蓝屏的临时分析解答
- 【王道】倒可乐、广度优先算法
- 独立,做新世纪的好少年,无所畏惧
- python之python3.x版本用urllib爬虫出现的module 'urllib' has no attribute 'urlopen'与urllib.error.HTTPError: HTT
- 打印机简体打出繁体处理方法
- Solr基础教程之Schema.xml(二)