Death to Binary? POJ - 2116(模拟+贪心)

告别纯文本RAG:用Dify 1.11.0多模态知识库,5步搭建一个能“读图”的智能客服助手 本文详细介绍了如何利用Dify 1.11.0多模态知识库构建智能视觉客服助手,通过5个步骤实现图片内容理解与专业回复。从准备多模态素材到配置知识库节点,再到设计工作流逻辑和性能优化,帮助开发者快速搭建高效客服系统,显著提升用户体验和问题解决效率。 阅读详情

Death to Binary? POJ - 2116

The group of Absurd Calculation Maniacs has discovered a great new way how to count. Instead of using the ordinary decadic numbers, they use Fibonacci base numbers. Numbers in this base are expressed as sequences of zeros and ones similarly to the binary numbers, but the weights of bits (fits?) in the representation are not powers of two, but the elements of the Fibonacci progression (1, 2, 3, 5, 8,... - the progression is defined by F0 = 1, F1 = 2 and the recursive relation F n = F n-1 + F n-2 for n >= 2).

For example 1101001 Fib = F0 + F3 + F5 + F6 = 1 + 5 + 13 + 21 = 40.

You may observe that every integer can be expressed in this base, but not necessarily in a unique way - for example 40 can be also expressed as 10001001 Fib. However, for any integer there is a unique representation that does not contain two adjacent digits 1 - we call this representation canonical. For example 10001001 Fib is a canonical Fibonacci representation of 40.

To prove that this representation of numbers is superior to the others, ACM have decided to create a computer that will compute in Fibonacci base. Your task is to create a program that takes two numbers in Fibonacci base (not necessarily in the canonical representation) and adds them together.

Input
The input consists of several instances, each of them consisting of a single line. Each line of the input contains two numbers X and Y in Fibonacci base separated by a single space. Each of the numbers has at most 40 digits. The end of input is not marked in any special way.
Output
The output for each instance should be formated as follows:

The first line contains the number X in the canonical representation, possibly padded from left by spaces. The second line starts with a plus sign followed by the number Y in the canonical representation, possibly padded from left by spaces. The third line starts by two spaces followed by a string of minus signs of the same length as the result of the addition. The fourth line starts by two spaces immediately followed by the canonical representation of X + Y. Both X and Y are padded from left by spaces so that the least significant digits of X, Y and X + Y are in the same column of the output. The output for each instance is followed by an empty line.

Sample Input

11101 1101
1 1

Sample Output

   100101
+   10001
  -------
  1001000

   1
+  1
  --
  10

题意:

以二进制的形式给出一串数列(例:11101),要求按照斐波那契数列的规律化为10进制,斐波那契数列1,2,3,5,8,13,21···,其标号分别为F0,F1,F2,F3···,化为十进制:1*1+2*0+3*1+5*1+8*1=17.数列11101的标准形式为:100101(中间不能有连续两个或两个以上的1出现即为标准形式,对每个十进制数字, 标准形式有且只有一种)。
要求输入两串数列,用空格隔开。输出两串数列的标准形式以及两串数列的相加结果,结果也要用标准形式表示。

分析:

∵F[n]=F[n−1]+F[n−2]∵F[n]=F[n−1]+F[n−2]
∴∴我们知道如果存在了相邻到11,那么这两个连续到11一定可以用一个1表示(高一位)
∴∴都可以写成不连续的1的形式

我们采用贪心的方式解决,方法如下:
1. 将所给数字转化成十进制数,然后求出和
2. 将十进制数转化成fib形式

将十进制转化成fib形式方法如下:
1. if  num>=fib[i]→num−fib[i]→if  num>=fib[i]→num−fib[i]→该位为1
2. else ifelse if 字符串不是空 →→ 该位为0

仅仅这两步大家可能会有疑问,这样循环过程中
如果连续两次循环执行时,会不会连续两次都是num >= fib[i],这样字符串就有连续的1了?

下面说明这种情况不会出现:
F[n]=F[n−1]+F[n−2]F[n]=F[n−1]+F[n−2]
1—— 2 —— 3—— 5—— 8 —— 13—— 21
一、if num>fib[i]if num>fib[i],但是一定小于fib[i+1]fib[i+1]

即fib[i]<num<fib[i+1]fib[i]<num<fib[i+1]

∵fib[i−1]+fib[i]=fib[i+1]∵fib[i−1]+fib[i]=fib[i+1]

∵fib[i]<num<fib[i+1]∵fib[i]<num<fib[i+1]

∴num−fib[i]<fib[i−1]∴num−fib[i]<fib[i−1]

这就证明了,减去当前fib数后,一定也小于前一个fib数,这就保证了不会出现连续的1。
二、如果直接等于fib那就更好说了,就当前位为1就结束了

这道题运用到算法简单,但是需要对菲波那契数列有深刻理解才行
code:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;
typedef long long ll;
const int MAXN = 55;
int n;
ll fib[MAXN];
string A,B;
void init(){
    fib[0] = 1;
    fib[1] = 2;
    for(int i = 2; i < MAXN; i++){
        fib[i] = fib[i-1] + fib[i-2];
    }
}
ll toDec(string s){
    ll ans = 0;
    int len = s.length();
    for(int i = 0; i < len; i++){
        int val = s[len-i-1] - '0';
        if(val)
            ans += fib[i];
    }
    return ans;
}
string toFib(ll num){
    string ans = "";
    for(int i = 40; i >= 0; i--){
        if(num >= fib[i]){
            num -= fib[i];
            ans += '1';
        }
        else if(ans != "")
            ans += '0';
    }
    if(ans == "") ans = "0";
    return ans;
}
int main(){
    init();
    while(cin >> A >> B){
        ll a,b,c;
        a = toDec(A);
        b = toDec(B);
        c = a + b;
        //cout << a << b << c << endl;
        string fa,fb,fc;
        fa = toFib(a);
        fb = toFib(b);
        fc = toFib(c);
        //cout << fa << fb << fc << endl;
        int lena = fa.length();
        int lenb = fb.length();
        int lenc = fc.length();
        cout << "  ";
        for(int i = 0; i < lenc-lena; i++){
            cout << " ";
        }
        cout << fa << endl;
        cout << "+ ";
        for(int i = 0; i < lenc-lenb; i++){
            cout << " ";
        }
        cout << fb << endl;
        cout << "  ";
        for(int i = 0; i < lenc; i++){
            cout << "-";
        }
        cout << endl;
        cout << "  " << fc << endl;
        cout << endl;
    }
    return 0;
}
锂电池充电器电路设计 里面有电路 锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。 立即下载

相关推荐

grafana对接zabbix数据展示

【配置】点击【模板】点击【创建模板】添加三个监控项:【名称】搜索【】创建的模板;点击上方【监控项】,点击创建【监控项】点击上方【触发器】点击【创建触发器】主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】查看:左侧点击【监测】点击【主机】点击【Zabbix server】点击最新数据,找到添加的三个模板主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】把监控模板用起来① 明确获取指标数据的方法。

2401_83883919的博客 6592

第一题:斐波那契数列

import java.util.Scanner; public class Fibonacci { public static int Fibonacci(int m) { //定义一个长度为40的数组 int[] arr = new int[40]; int s = 0; //先求出0,1的值,因为f(n)=f(n-1)+f(n-2),n必须>=2才合理 ar.

sunianjinshi666的博客 465

Win11用户文件夹中文名修改全攻略

本文详细介绍了Windows 11系统中修改中文用户文件夹名称的完整步骤。操作包含七个关键环节:前期数据备份、账户名称修改、管理员账户激活、用户文件夹重命名、注册表路径更新、收尾操作及注意事项。特别强调需要同步修改账户名、文件夹名和注册表关联路径,并建议操作前备份重要数据。文中还针对常见问题提供了解决方案,如软件报错时的符号链接创建方法。整个过程需谨慎操作,建议在管理员权限下逐步执行,修改完成后需验证系统及软件功能是否正常。

Qinti_mm的博客 3123

Fibonacci base

而且,对于每个正整数,存在若干个不同的集合,每个集合由 Fibonacci 数列中的数字组成,集合中的数字的和等于该正整数。例如:13 可以表示为集合 {13},{5, 8} 或 {2, 3, 8} 中数字的和,17 可以表示为集合 {1, 3, 13} 或 {1, 3, 5, 8} 中的数字的和。例如,数列中的第 2 个数字是 1(1=1+0),第 3 个数字是 2(2=1+1),第 4 个数字是 3(3=2+1),依此类推。给出一个正整数的集合,请您将这些数表示成 Fibonacci 二进制数。

m0_74282945的博客 631

Python爬虫案例:从39问医生网爬取口腔科的在线问答记录(单轮问答)

本次实验爬取39问医生网中口腔科分类下的所有在线单轮问答记录,每页32条,共100页,总数据量为3200条,最终结果以excel格式保存。

JieBao11的博客 1640

欧姆龙多PLC串行链接模式的应用

欧姆龙多PLC串行链接模式的应用 一、如何将两台CP1H进行串行PLC连接(PLC串行链接) 主机侧设定 从机侧设定 二、 如何实现编程通信 主机侧的【PC连接模式】为【全部】的时候 ① 主机会把自己的地址从3100开始,按照【链接字】设定的字数个数发送到每个从机的3100开始进行存储。 ② 从机会把自己的地址从31n0开始,按照主机侧参数【链接字】设定的字数个数发送到主机的31n0开始进行存储。 注:(n为从机的地址号,若从机号不连续,则该编号的地址将不被定义..

u014202847的博客 3082

Fibonacci 第 n 项 c++

题意:求Fibonacci数列的第n项,并对结果取模,即求 其中 这里由于n的值很大,故我们不能使用递推的方法求得第n项,于是我们考虑更快的矩阵快速幂 设表示一个的矩阵,我们希望依据推出。 尝试推倒一个base矩阵,使,即 于是我们便可以推倒出这样一个式子: 定义那么则有这个矩阵的第一行第一列元素,也就是的第一行第一列元素。 另外,当的时候可以直接输出1,不需要执行矩阵快速幂。 AC代码如下: #include<bits/stdc++.h> #de...

m0_51028279的博客 1037

大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略

本篇文章是《Spring AI实战》专栏的第一篇开发入门文章,我们将借助一个完整的OpenAI聊天应用示例,详细介绍如何运用Spring Boot和Spring AI快速搭建一个支持OpenAI API的聊天服务,全面涵盖基础对话、流式对话、多提供商配置等核心功能。

寻道AI,探索AI无限可能! 6861

poj2116——模拟

题目链接:http://poj.org/problem?id=2116 The group of Absurd Calculation Maniacs has discovered a great new way how to count. Instead of using the ordinary decadic numbers, they use Fibonacci base numbers...

mumei的博客 391

第1章 环境准备

本章是 Kubernetes 高可用集群部署的前置基础环境配置,所有节点必须严格按顺序执行。主要内容包括:节点规划(IP、角色、配置要求)、VMware 克隆节点环境清理(解决 MAC 地址和主机名冲突)、统一工作目录创建、主机名与 hosts 解析配置、系统基础升级、防火墙与 swap 关闭、内核模块加载(overlay、br_netfilter、ip_vs)、网络参数优化(IP 转发、桥接过滤)、时间同步配置等。Ubuntu 24.04 内核 6.8+ 原生支持 eBPF 和 IPVS,无需手动升级内核

幸福街--linux技术分享 210

12.工具高级参数CogCalibNPointToNPointTool

CogCalibNPointToNPointTool是一种多点2D坐标校正工具,用于将图像像素坐标转换为物理世界坐标。该工具通过两组点(图像坐标点和物理坐标点)计算最佳转换关系,并将结果保存供后续使用。操作步骤包括获取图像、添加坐标点对、计算转换参数。校正结果会显示平移、缩放、旋转等参数及RMS误差值,较大的误差可能表明点位置不准确或自由度不足。该工具广泛应用于机器视觉领域,通过9点标定等案例可验证坐标转换的准确性并优化参数设置。

203

Fibonacci求解第n项(矩阵法)

1、递归法,时间复杂度:O(n*n);2、普通循环算法:时间复杂度:O(n);3、矩阵法:时间复杂度:O(logn);前2个方法,都比较简单,刷题时候用过了,但是这次刷题,属于Fibonacci加强版,对时间性能很有要求,使用1或者2方法一直ac不了,所以看了矩阵求解方法。这个方法看了一个下午才明白,所以一定要记录的。3.1、先看一下矩阵法的推导过程,也就是如何把一个Fibonacci求解转为对矩...

iCoding91 1665

5-EP4CE10F17C8-引脚配置

EP4CE10F17C8-引脚配置

weixin_44479192的博客 719

Death to Binary? 模拟+斐波那契进制数标准式

题意:用斐波那契数来计数,一个字符串s,字符串中只有0或1,f[i]代表第i个斐波那契数 0代表0*f[i],1代表1*f[i],从字符串最右边开始,第i个字符代表f[i], 例如1010=0*f[0]+1*f[1]+0*f[2]+1*f[3]=0+2+0+5=7; 标准字符串:字符串中任意两个1不相邻 难点:将所给字符串转化成标准字符串 思路:因为任一斐波那契数都是前两个相加,因此从小

Big_Rui的博客 1022

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Death to Binary? POJ - 2116 (A+B,模拟,训练比赛化)

传送门 题意:多组输入,每组输入两个01串表示的数a,b。要求表示a+b=c。 a,b之多40位 Fibonacci进制:。从低位到高位,权值分别为1,2,3,5,8,13,,,,,, 题解:就是个模拟a+b。这种模拟题要注意,一半很容易出先小错误。 特别注意:a,b可能等于"0"。 收获:训练比赛化——做题的时候不用太考虑每一步骤是怎么出来的,AC算完事儿。之后再来总结。 代码: #include <cstdio> #include <cstrin...

I_have_a_world的博客 138

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Death to Binary?

该题主要是。将求出的结果(N)换算为没有连续1的串,从高位到低位寻找,找到第一个小于等于N的位置即为最后字符的长度,继续向前遍历组成N,位置赋值为 1 ,就将该数(Fn(i))从N中减去,直至遍历完成。(注意:如果i小于零,说明该数为 0 ) #include #include #include using namespace std; typedef long long ll; ll fn[

立交桥的博客 332

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Death to Binary? (模拟)题解

思路:除去前导0,注意两个1不能相邻(11-&gt;100),注意 0 *** 或者*** 0或者0 0情况用string的reverse()很舒服代码:#include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;cstdlib&gt; #include&lt;cctype&gt; #include&lt;queue&gt; #includ...

努力,奋斗 267

POJ2116题解(1.低阶:贪心 2.高阶:利用斐波那契的规律)

1.题目分析: 我这里介绍一种最简单的方法:就是将字符串转换成整数并将整数转换成字符串。将整数转换为字符串的时候有一个技巧就是从大往小去减权重,这样可以避免连续的1。这里说一下为什么: 为了避免前导零的情况,我们需要一直找权值小于等于整数的,找到一个就减去,那么无可非议它前面的那个权值是大于整数的,这个权值小于等于整数,说明下一个权值一定是大于整数减去当前的权重,所以一定不会出现连续1的情况。附上代码! #include<iostream> #include<algorithm> #

stn54999的博客 244

UVa 948 - Fibonaccimal Base

题目:给你一个数字表示成fi 分析: 说明:

小白菜又菜 2813

POJ 2116解题报告

Death to Binary? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1494   Accepted: 461 Description The group of Absurd Calculation Maniacs has discovered a

jhljx的专栏 1064

poj 2116 Death to Binary

传送门:点击打开链接DescriptionThe group of Absurd Calculation Maniacs has discovered a great new way how to count. Instead of using the ordinary decadic numbers, they use Fibonacci base numbers. Numbers in thi...

Xavier's blog 522

POJ 2116 Death to Binary? (斐波那契+模拟)

题意:给出两个01串,每个位的权重是斐波那契值,要求相加后的结果,并将它们都转化为不存在连续1的字符串。 题解:斐波那契+模拟 预处理斐波那契数列,然后将原串转化为十进制numnumnum。接下来考虑如何转化。 已知原串位数不超过40位,可以知道上限为f[41]f[41]f[41],从上限往下遍历,若numnumnum≥f[i]f[i]f[i],减去即可,这样就不会出现连续1,推一推就知道了。 #define _CRT_SECURE_NO_WARNINGS #include<iostream>

gongyuandaye的博客 289

POJ - 2116 Death to Binary?

The group of Absurd Calculation Maniacs has discovered a great new way how to count. Instead of using the ordinary decadic numbers, they use Fibonacci base numbers. Numbers in this base are expressed ...

>*,< 321

Death to Binary? POJ - 2116

原oj点击打开链接vj点击打开链接 这个题 说实话 我wa 了很多发  wa到怀疑人生 好不容易看别人的代码  不wa了 结果 给我出来一个 Presentation Error(格式错误)    搞得我头皮 发麻  主要了解一下的就是 前面需要 的空格 以及 每行需要 最后答案的 长度 这个就可以了 具体的题意 谷歌一下就行 感觉这道题 有点逗 ~~~~#include&lt;stdio.h&g...

qq_41071646的博客 330

Death to Binary? POJ - 2116(模拟 斐波那契数列)

题目地址:http://poj.org/problem?id=2116 思路:输入两个斐波那契数列基数制的数,转换成十进制,相加,再把这三个十进制数转换成规范性的斐波那契数列基数制的数。 注意输入的斐波那契数列基数制的数可能有零。 在转换成规范性的斐波那契数列基数制的数时,直接将十进制数化成尽可能大的斐波那契数列基数位即可。当斐波那契数列基数的第n位是1,第n-1位不可能也是1,因为 Fn = F...

呼吸 246

POJ 2116

题意:以二进制的形式给出一串数列(例:11101),要求按照斐波那契数列的规律化为10进制,斐波那契数列1,2,3,5,8,13,21···,其标号分别为F0,F1,F2,F3···,化为十进制:1*1+2*0+3*1+5*1+8*1=17.数列11101的标准形式为:100101(中间不能有连续两个或两个以上的1出现即为标准形式,对每个十进制数字, 标准形式有且只有一种)。 要求输入两串数列,

dawayangzen的专栏 1254
上一篇: C Looooops POJ - 2115(扩展欧几里徳)
下一篇: Minimum Ternary String(思维)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值