Codeforces 458A/51nod 1491 黄金系统【思维】好题~
来源:互联网 发布:java虚拟机的内存布局 编辑:程序博客网 时间:2024/06/10 13:38
1491 黄金系统
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
现在给出两个黄金系统下面的数字,请比较他们的大小。
Input
单组测试数据。第一行有一个字符串A。第二行有一个字符串B。按照a0到an的顺序输入。他们都是非空串,可能有前导0,并且只有0和1组成,长度不超过100000。
Output
如果A>B,输出>;如果A=B,输出=;如果A<B,输出<;
Input示例
0010011
Output示例
=
思路:
1、直接求这个结果显然是不可行的(爆LL)。
2、如果我们在纸上稍微写出几个结果,我们不难发现,对应我们设定Qi=1*q^i,那么其满足斐波那契数列。
即Qi=Qi-1+Qi-2.
那么考虑进位问题,对应一个字符串,如果有:ai==0&&ai+1==1&&ai+2==1,那么我们可以进位变成:ai=1,ai+1=0,ai+2=0;
如果我们将一个字符串处理到没法继续进位之后,那么我们接下来只要判定哪个字符串的字典序较大即可(因为有前导0,所以不能直接使用strcmp)。
3、处理进位问题的时候注意要稍加技巧,暴力处理的姿势如果不好,会TLE....(具体参考代码.)
(我们从第一个位子开始枚举,一直枚举到最后,如果当前指针之后两个都是1,表示可以进位,那么对应进位之后,指针向后挪动两个位子,继续判断,如果当前指针位子不能进位了,那么break);
Ac代码:
#include<stdio.h>#include<string.h>using namespace std;char a[100006];char b[100006];int main(){ while(~scanf("%s%s",a+1,b+1)) { a[0]='0'; b[0]='0'; int lena=strlen(a+1); int lenb=strlen(b+1); for(int i=0;i<=lena;i++) { for(int j=i;j>=0;j-=2) { if(a[j]=='0'&&a[j+1]=='1'&&a[j+2]=='1') { a[j+1]='0'; a[j+2]='0'; a[j]='1'; } else break; } } for(int i=0;i<=lenb;i++) { for(int j=i;j>=0;j-=2) { if(b[j]=='0'&&b[j+1]=='1'&&b[j+2]=='1') { b[j+1]='0'; b[j+2]='0'; b[j]='1'; } else break; } } if(lena>=lenb) { int flag=0; for(int i=0;i<lena-lenb;i++) { if(a[i]>'0')flag=1; } if(flag==1)printf(">"); else { for(int i=lena-lenb,j=0;i<=lena;i++,j++) { if(a[i]==b[j])continue; if(a[i]>b[j]) { flag=1; break; } if(a[i]<b[j]) { flag=2; break; } } if(flag==0)printf("="); if(flag==1)printf(">"); if(flag==2)printf("<"); } printf("\n"); } else { int flag=0; for(int i=0;i<lenb-lena;i++) { if(b[i]>'0')flag=1; } if(flag==1)printf("<"); else { for(int i=lenb-lena,j=0;i<=lenb;i++,j++) { if(a[j]==b[i])continue; if(a[j]>b[i]) { flag=1; break; } if(a[j]<b[i]) { flag=2; break; } } if(flag==0)printf("="); if(flag==1)printf(">"); if(flag==2)printf("<"); } printf("\n"); } }}
0 0
- Codeforces 458A/51nod 1491 黄金系统【思维】好题~
- 51NOD 1491 黄金系统 && Codeforces 458 A. Golden System(斐波那契数列 + 找规律)
- 51nod 1491 黄金系统
- 51Nod-1491-黄金系统
- 51nod 1491 黄金系统
- 51nod 1491 黄金系统
- 1491 黄金系统 思维题
- 51 nod 1491 黄金系统(贡献)
- 51nod 1491-黄金系统(数论->递推)
- 51nod 1491|CodeForces 458A Golden System(数论 )
- 51nod 1391 01串(锻炼思维的好题)
- 51nod 1287 加农炮(锻炼思维的好题)
- 51nod 1201 整数划分(锻炼思维的好题)
- 51nod 1677 treecnt【Dfs+思维+数论】好题
- 51nod 1276 岛屿的数量【思维】好题~
- 51nod 1020 逆序排列【Dp+思维递推优化】好题!好题!好题!
- CodeForces - 417A(思维题)
- Codeforces 424A (思维题)
- MYSQL分库分表总结
- 原生js的一些研究和总结(1)
- 解决XML警告"No grammar constraints (DTD or XML Schema) referenced in the document"
- intellij idea方法模板
- [ Laravel 5.2 文档 ] 服务 —— 缓存
- Codeforces 458A/51nod 1491 黄金系统【思维】好题~
- zeromq 中的 zmq_ctx_destory
- iOS 计算两个时间段的差值
- WebRtc 音频引擎-linux demo
- Java蓝桥杯Huffuman树
- 理解OAuth 2.0
- xpath入门
- 小虫出世----第一个爬虫程序(扒下慕课网站的图片)
- ActiveMQ-JMS(五):ObjectMessage的安全问题