[构造 || 斐波那契分解] BZOJ 2912 [Poi1997]Jump

斐波那契数列的四种解法 题目描述 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起 阅读详情

论文:何林--信息学中的守恒法

构造就不摘了 摘录fib分解的做法




http://main.edu.pl/ 上内存卡的紧 把高精度的大小改下即可


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;

const int con=100000000;
class Int{
public:long long a[1000];
  void getdata(int x){memset(a,0,sizeof(a));while (x){a[++a[0]]=x%con;x=x/con;}}
  void pri(bool flag){
    if (a[0]==0||(a[0]==1&&a[1]==0)){printf("0");if (flag)printf("\n");return;}
    printf("%lld",a[a[0]]);
    for (int i=a[0]-1;i;i--)
      printf("%08lld",a[i]);
    if (flag)printf("\n");
  }
  bool operator <(const Int &X){
    if (a[0]<X.a[0])return true;if (a[0]>X.a[0])return false;
    for (int i=a[0];i;i--){if (a[i]<X.a[i])return true;if (a[i]>X.a[i])return false;}
    return false;
  }
  bool operator >(const Int &X){
    if (a[0]<X.a[0])return false;if (a[0]>X.a[0])return true;
    for (int i=a[0];i;i--){if (a[i]<X.a[i])return false;if (a[i]>X.a[i])return true;}
    return false;
  }
  bool operator <=(const Int &X){
    if (a[0]<X.a[0])return true;if (a[0]>X.a[0])return false;
    for (int i=a[0];i;i--){if (a[i]<X.a[i])return true;if (a[i]>X.a[i])return false;}
    return true;
  }
  bool operator >=(const Int &X){
    if (a[0]<X.a[0])return false;if (a[0]>X.a[0])return true;
    for (int i=a[0];i;i--){if (a[i]<X.a[i])return false;if (a[i]>X.a[i])return true;}
    return true;
  }
  bool operator ==(const Int &X){
    if (a[0]!=X.a[0])return false;for (int i=a[0];i;i--)if (a[i]!=X.a[i])return false;
    return true;
  }
  Int operator +(const Int &X){
    Int c;memset(c.a,0,sizeof(c.a));
    for (int i=1;i<=a[0]||i<=X.a[0];i++)
      {c.a[i]=c.a[i]+a[i]+X.a[i];c.a[i+1]+=c.a[i]/con;c.a[i]%=con;}
    c.a[0]=max(a[0],X.a[0]);if (c.a[c.a[0]+1])c.a[0]++;
    return c;
  }
  Int operator +(int num){
    Int c;memcpy(c.a,a,sizeof(c.a));c.a[1]+=num;
    for (int i=1;i<=c.a[0]&&c.a[i]>=con;i++)c.a[i]-=con,c.a[i+1]++;
    while (c.a[c.a[0]+1])c.a[0]++;
    return c;
  }
  Int operator -(const Int &X){
    Int c;memcpy(c.a,a,sizeof(c.a));
    for (int i=1;i<=a[0];i++){c.a[i]=c.a[i]-X.a[i];if (c.a[i]<0){c.a[i+1]--;c.a[i]+=con;}}
    while (c.a[0]&&!c.a[c.a[0]])c.a[0]--;
    return c;
  }
  Int operator -(int num){
    Int c;memcpy(c.a,a,sizeof(c.a));c.a[1]-=num;
    for (int i=1;i<=c.a[0]&&c.a[i]<0;i++)c.a[i]+=con,c.a[i+1]--;
    while (c.a[0]&&!c.a[c.a[0]])c.a[0]--;
    return c;
  }
  Int operator *(const Int &X){
    Int c;memset(c.a,0,sizeof(c.a));
    for (int i=1;i<=a[0];i++)for (int j=1;j<=X.a[0];j++)
			       {c.a[i+j-1]+=a[i]*X.a[j];c.a[i+j]+=c.a[i+j-1]/con;c.a[i+j-1]%=con;}
    c.a[0]=max(a[0]+X.a[0]-1,0ll);if (c.a[a[0]+X.a[0]]>0)c.a[0]++;
    return c;
  }
  Int operator *(int num){
    Int c;memset(c.a,0,sizeof(c.a));
    for (int i=1;i<=a[0];i++){c.a[i]+=a[i]*num;if (c.a[i]>=con){c.a[i+1]+=c.a[i]/con;c.a[i]%=con;}}
    c.a[0]=a[0];if (c.a[c.a[0]+1]>0)c.a[0]++;
    return c;
  }
  Int operator /(int num){
    Int c;memset(c.a,0,sizeof(c.a));
    long long x=0;for (int i=a[0];i;i--){x=x*con+a[i];c.a[i]=x/num;x=x%num;}
    c.a[0]=a[0];if (c.a[0]&&!c.a[c.a[0]])c.a[0]--;
    return c;
  }
}F[11005],Tot;
int m;

const int B=80;

int n,a[10005],b[10005];
int lst[100005],pnt;

int main(){
  int minv=1<<30,maxv=-1<<30;
  freopen("t.in","r",stdin);
  freopen("t.out","w",stdout);
  scanf("%d",&n);
  for (int i=1;i<=n;i++)
    scanf("%d%d",a+i,b+i),minv=min(minv,a[i]),maxv=max(maxv,a[i]);
  F[1].getdata(1); F[2].getdata(2);
  int m=maxv+B;
  for (int i=3;i<=maxv+B;i++)
    F[i]=F[i-1]+F[i-2];
  for (int i=1;i<=n;i++)
    Tot=Tot+F[a[i]+B]*b[i];
  while (F[m]<Tot)
    m++,F[m]=F[m-1]+F[m-2];
  Int Zero;
  Zero.getdata(0);
  while (Tot>Zero){
    while (F[m]>Tot) m--;
    Tot=Tot-F[m];
    lst[++pnt]=m-B;
  }
  for (int i=pnt;i;i--)
    printf("%d ",lst[i]);
  return 0;
}


基于斐波那契数列的正整数分解算法 // 给定一个正整数N, 其中 // N = A1 + A2 + ... + An 其中A1, A2, ..., An为斐波那契数列不重复的正整数 (不会有 2个1 这种结果) // 请实现下面的function (function格式请勿修改) // 其中输入参数为N, 返回值为A1, A2, ..., An.的递减数组 // 若找不到结果则返回空数组 // 斐波那契数列定义如下: // F1 = 1 // F2 = 1 // Fn = Fn-1 + Fn-2 // -> 斐波那契数列的值为: 1, 1, 2, 3, 5, 8, 13, 21, 34, .... // Ex input 11 -> output [8, 3] // Ex input 31 -> output [21, 8, 2] 立即下载

相关推荐

斐波那契数列查找

斐波那契数列查找

Lyndon分解

Lyndon分解 HDU-6761

micaudience的博客 1109

斐波拉契数列

非递归的,利用一个数组解决的斐波拉契问题解法,简洁明了,新手教学

【学习笔记】lyndon分解

摘抄自quack的ppt。

cqbzlydd的博客 1420

Mac开发环境一键配置指南|从零到生产力

类别工具包管理Homebrew终端版本管理容器编辑器效率用一键脚本的话,2小时内可以搞定全部环境。有问题评论区交流~

在代码的世界里,每天进步1% 616

MounRiver Studio实战:像管理个人项目一样整理沁恒MCU的EVT例程(附文件结构图)

本文详细介绍了如何使用MounRiver Studio重构沁恒MCU的EVT例程,实现工程化管理。通过分析官方EVT设计的局限性,提出标准化的目录结构和迁移步骤,帮助开发者提升代码可维护性和团队协作效率。文章还提供了MounRiver Studio的关键配置参数和常见问题排查指南,适用于沁恒MCU开发者。

weixin_33940469的博客 354

算法——Lyndon分解

是将一个字符串 ( s ) 唯一分解为若干 Lyndon 串的序列 ( s = w_1w_2\cdots w_k ),满足 ( w_1 \geq w_2 \geq \cdots \geq w_k )(字典序非递增)。,当且仅当对于其所有真后缀 ( t )(即 ( t \neq s ) 且 ( t ) 是 ( s ) 去掉前若干字符后的子串),都有 ( s < t )(字典序比较)。Duval 算法是高效计算 Lyndon 分解的方法,时间复杂度为 ( O(n) ),适用于长度为 ( n ) 的字符串。

oopxiajun博客专栏 1243

1998年高教社杯全国大学生数学建模竞赛 B 题:《灾情巡视路线》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 874

斐波那契数列的分解

\[f[1] = 1,f[2] = 1,……\] \[F_n = \frac{1}{\sqrt{5}} ((\frac{1 + \sqrt{5}}{2})^n - (\frac{1 - \sqrt{5}}{2})^n)\] 转载于:https://www.cnblogs.com/AlphaWA/p/11372043.html

702

深度学习与西储大学轴承数据集(一)

西储大学数据集介绍

weixin_50642818的博客 1万+

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 448

Lyndon分解(后缀中的最小串)

After All LyndonLyndonLyndon串: 对于字符串xxx,如果xxx的字典序严格小于xxx的所有后缀的字典序,我们称xxx是简单串,或者LyndonLyndonLyndon串。 近似LyndonLyndonLyndon串: 若xxx为LyndonLyndonLyndon串,则xxxx′xxxx&#x27;xxxx′为近似LyndonLyndonLyndon串,x′x&...

QAQ 2331

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2387

学习笔记(Lyndon 分解)

Lyndon 串: 对于字符串 s ,如果 s 的字典序严格小于 s 的所有后缀的字典序,我们称 是简单串,或者 Lyndon 串 。举一些例子 a , ab , aab , abb , ababb , abcd 都是 Lyndon 串。 如果 s 是 Lyndon 串,当且仅当

Nefeertari的博客 585

【CANoe示例分析】SOMEIPWithvCDL_16

本示例来源于官方提供的示例工程:0004_基于vCDL实现SOMEIP通信_Demo\0004_基于vCDL实现SOMEIP通信_Demo\SOMEIPWithvCDL。

jasonj333 561

手把手教你学simulink(16.10)-- 基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目

基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目的详细实例介绍。这个项目将重点放在IIR滤波器的设计、实现和仿真上,帮助你理解和应用IIR滤波器在信号处理中的作用。

MHD0815的博客 703

洛谷 2320 & bzoj 1192 题解 (思维,构造)

原题链接: 洛谷 bzoj 题意简述 给定一个n(&lt;=1e9)n(&lt;=1e9)n(<=1e9),构造一个序列使得: [1,n][1,n][1,n]中所有整数是这个序列中某些元素的和 字典序最小 输出这个序列 思路 我们一开始认为:nnn是1e91e91e9,这个序列怎么也是1e81e81e8,但是为什么还要输出呢?不是要OLEOLEOLE。。。 仔细想想,并不...

LightningUZ的博客 296

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

7.21 ACM-ICPC字符串算法 Lyndon 分解

Lyndon 分解是一种将字符串分解为最小的、字典序最小的不可再分的子串(即Lyndon单词)的序列的方法。一个字符串称为Lyndon 单词,如果它在它所有的旋转中字典序最小。例如,"a"、"b"、"ab"、"aab"、"abb"都是Lyndon单词,而"ba"和"aabba"则不是。Lyndon 分解提供了一种独特的视角来理解和处理字符串。通过Duval算法,我们可以高效地对任何字符串进行分解,揭示其内在的结构和性质。无论是在学术研究还是在解决实际编程问题中,Lyndon 分解都是一个强有力的工具。

tang7mj的博客 600

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【动态规划篇】斐波那契数列&&拆分词句&&三角矩阵

动态规划(Dynamic Programming,简称为 DP)是分治思想的延伸,通俗来说就是大事化小,小事化了的艺术。在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。把原来的问题分解成了几个相似的子问题所有的子问题都只需要解决一次储存子问题的解动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递推关系),动态规划问题一般从以下四个角度来考虑:状态定义、状态间的转移方程定义、状态的初始化和返回结果。

joy.728的博客 1018

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

BZOJ 3101(N皇后-N皇后O(n)构造一组解的方法)

3101: N皇后 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 70  Solved: 32 [Submit][Status] Description n*n的棋盘,在上面摆下n个皇后,使其两两间不能相互攻击… Input 一个数n Output

nike0good |Oier&ACMer | 熟能生巧 2929

打卡刷题(第5天)

这题n给的范围为1-10^9,所以我们估算一下,斐波那契数列的第45项比10^9大一些,因此n一定由这45项内的数组合。题目提示n拆分后若有多组数据,以个数最小的为准,所以我们先从比n小但尽量接近n的数开始,这样拆分的个数最少。然后使用二分法,找到最接近n的数,存入数组中,让n减去这个数,接着在用二分查找最接近n的数,直到n被减至0,这样我们就找到了一组n的拆分方法。𝑡行,每行一个字符串,表示拆分方法(格式:𝑛=𝑎1+𝑎2+𝑎3+…若有多组数据,以个数最小的为准,若仍有多组,输出右边尽量大的一组。

Vangarud_的博客 434

[POI1997] 单色三角形

solution:     这题可以暴力,真的,第一遍抱着试试的心理用暴力过了,数据太水,不到立方的效率竟然过了。      正解容斥原理(来自大佬http://blog.csdn.net/xy20130630):            为了解决这道题目,我们需要有一个转换的思想。因为三角形总数,是等于单色三角形的数量加上不单色三角形的数量(好拗口),而三角形的总数等于C(n,3)...

weixin_30562507的博客 176

ACM 227. [POI1997] 阿里巴巴(BFS)

227. [POI1997] 阿里巴巴 ★☆   输入文件:ali.in   输出文件:ali.out   简单对比 时间限制:1 s   内存限制:128 MB 想要“芝麻开门”,必须拥有一定数量的钱币,其中包括至少z枚金币,s枚银币和m枚铜币。 最初,阿里巴巴拥有三种钱币若干枚。他可以按照一定规则和芝麻之门的守护者进行交易。 每一种规则用以下形式表示: z1, s1, m1 ->

seektheworld 674

【算法原理+洛谷P6114+HDU6761】Lyndon分解

算法原理: Duval算法时间效率O(n)O(n)O(n) 此处谈一谈自己对算法原理的理解: k-j相当于循环节的长度,i到j之间可能会出现多个重复的lyndon串,所以后面更新i的时候用的是while。 s[j]<s[k]的时候很好理解,s[j]包含在以i为起点的lyndon串中,j此时回退到起点, s[j]=s[k]时, j和k同时++,一直在向右移动匹配(i到j之间可能出现多个循环节),此时循环节的长度不变。 例题 lyndon分解后每个lyndon串的右端点(字符串下标从1开始存) 洛.

Cassie_zkq的博客 526

POI解析1997-2003、2007版本excel

本文就poi解析1997-2003/2007版本进行总结,走统一接口。 maven引入: sheet存储模型 import java.util.HashMap; import java.util.Map;/** * excel sheet 模型抽象 * Created by xieyang@e6yun.com on 2016年11月2日. * */ public cl

艺匠之美,技术人生! 2065
上一篇: [BFS 排列Hash] POJ 1184 聪明的打字员
下一篇: [Notes] 摘《何林--信息学中的守恒法》
里阿奴摩西
博客等级 码龄13年 204粉丝 975原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值