51 nod 1491 黄金系统(贡献)

题目来源:  CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40  难度:4级算法题
 收藏
 关注

q=5+12 在黄金系统下面 a0a1...an 等于  ni=0aiqni  ,其中  ai  是0或者1。

现在给出两个黄金系统下面的数字,请比较他们的大小。


Input
单组测试数据。
第一行有一个字符串A。
第二行有一个字符串B。
按照a0到an的顺序输入。
他们都是非空串,可能有前导0,并且只有0和1组成,长度不超过100000。
Output
如果A>B,输出>;
如果A=B,输出=;
如果A<B,输出<;
Input示例
00100
11
Output示例
=
 
 

解:枚举几项就可以发现是斐波那契数列,但是不能直接相加比较,所以将他们的贡献值转化为最高位上 即可以比较大小

既然给出了斐波那契的数列 那么一定是要用到他的性质 f[i]=f[i-1]+f[i-2],即将11转化为100

注意细节 1111->10011->10100 注意暴力的姿势要好(即判断是否满足条件 满足-> j-=2 否则break)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
typedef long long LL;
char s1[N], s2[N];
int solve(char str[],int len)
{
    int i;
    int flag=0;
    if(len>=2)
    {
        for(i=2;; i++)
        {
            for(int j=i;j>=0;j-=2)
            {
                if(str[j-2]=='1'&&str[j-1]=='1'&&str[j]!='1') flag=1,  str[j]='1',str[j-2]='0',str[j-1]='0';
                else break;
            }
            if(str[i]=='\0') break;
        }
    }
    else i=len;
    for(i=i-1; i>=0; i--)
        if(str[i]!='0')  break;

    str[++i]='\0';
    reverse(str,str+i);
    str[i]='\0';
    return flag==1;
}

int main()
{
    memset(s1,'\0',sizeof(s1));
    memset(s2,'\0',sizeof(s2));

    scanf("%s %s",s1,s2);
    int len1=strlen(s1),len2=strlen(s2);
    reverse(s1,s1+len1);
    reverse(s2,s2+len2);
    solve(s1,len1);
    solve(s2,len2);
    len1=strlen(s1),len2=strlen(s2);
    if(len1==len2)
    {
        for(int i=0; i<len1; i++)
        {
            if(s1[i]>s2[i])
            {
                puts(">");
                return 0;
            }
            else if(s1[i]<s2[i])
            {
                puts("<");
                return 0;
            }
        }
        printf("=\n");
        return 0;
    }
    else printf("%c\n",len1<len2?'<':'>');
    return 0;
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值