3150 Pibonacci数 - Wikioi


题目描述 Description

      你可能听说过的Fibonacci数和圆周率Pi。

      如果你让这两个概念合并,一个新的深奥的概念应运而生:Pibonacci数。

      这些数可以被定义为对于x>=0:

        如果0<=x<4,则P(x) = 1

        如果4<=x,则P(x) = P(x - 1) + P(x - pi)

      其中Pi = 3.1415926535897...在这个问题中,你被要求计算对于一个给定的非负整数x对应P(x)的值。

输入描述 Input Description

      一个非负整数x。

输出描述 Output Description

      一个正整数P(x)。

样例输入 Sample Input

    11

样例输出 Sample Output

    20

数据范围及提示 Data Size & Hint

    数据范围 x<=30000

     

    来源 ICPC 2001 F

 

好题啊

转化题意,给你一个数,你可以一次减去1,或者减去pi,求你有多少种方法把它减到<4(如果它本来就小于4,方案就是1种)

想法1

枚举1的个数算出pi的个数,这是pi结尾的,算组合数

枚举pi的个数算出1的个数这是1结尾的,算组合数

然后加起来

眼瞎,以为只有3000,高兴地交上去,RE了,我靠竟然有30000,怎么办呢

问了问VFleaking,他想了想,帮我找出了一个有巨大优化空间的地方

我求组合数是暴力求的,其实枚举的时候组合数的n,m都是比较接近的,所以记一个lastn和一个lastm每次只要乘几个除几个就行了

然后优化到了10000左右可以过,又卡住了

FVleaking找到了差不多的题http://acm.hit.edu.cn/hoj/problem/view?id=1385

范围是3000,多组数据,我就交了,AC了,于是我的信心倍增,但是还是不知道怎么过30000

然后下了一个C++AC代码(当时也只有C和C++的)

看了以后果然是常数比我好

直接枚举pi的个数为n

然后给剩下的空间加上一个pi,算出这个空间可以容下多少个1,个数为m

可以想象,加上一个pi,pi的个数还是原来枚举的那么多(因为这个空间加上这些pi和1肯定还没满)

所以讨论1摆放情况,因为有可能1结尾,但是超出范围,根本不需要这个1,但是没关系这个方案只计算了一次也只会计算这一次,所以方案数就是C(n+m,n)

然后加上前面那个优化,就可以AC了..........

 

  1 const
  2     h=100000000000000;
  3 type
  4     aa=array[0..10000]of int64;
  5 var
  6     a,b:aa;
  7     n:longint;
  8 
  9 procedure cheng(x:longint);
 10 var
 11     i:longint;
 12 begin
 13     for i:=1 to b[0] do
 14       b[i]:=b[i]*x;
 15     for i:=1 to b[0] do
 16       begin
 17         inc(b[i+1],b[i]div h);
 18         b[i]:=b[i]mod h;
 19       end;
 20     i:=b[0]+1;
 21     while b[i]>0 do
 22       begin
 23         inc(b[0]);
 24         b[i+1]:=b[i]div h;
 25         b[i]:=b[i]mod h;
 26         inc(i);
 27       end;
 28 end;
 29 
 30 procedure jia;
 31 var
 32     i:longint;
 33 begin
 34     for i:=1 to b[0] do
 35       inc(a[i],b[i]);
 36     if b[0]>a[0] then a[0]:=b[0];
 37     for i:=1 to a[0] do
 38       begin
 39         inc(a[i+1],a[i]div h);
 40         a[i]:=a[i]mod h;
 41       end;
 42     i:=a[0]+1;
 43     while a[i]>0 do
 44       begin
 45         inc(a[0]);
 46         inc(a[i+1],a[i]div h);
 47         a[i]:=a[i]mod h;
 48         inc(i);
 49       end;
 50 end;
 51 
 52 procedure chu(x:longint);
 53 var
 54     i:longint;
 55 begin
 56     for i:=b[0] downto 2 do
 57       begin
 58         inc(b[i-1],(b[i]mod x)*h);
 59         b[i]:=b[i]div x;
 60       end;
 61     b[1]:=b[1]div x;
 62     while (b[b[0]]=0)and(b[0]>1) do
 63       dec(b[0]);
 64 end;
 65 
 66 procedure print;
 67 var
 68     i:longint;
 69     k:int64;
 70 begin
 71     write(a[a[0]]);
 72     for i:=a[0]-1 downto 1 do
 73       begin
 74         k:=h div 10;
 75         while k>1 do
 76           begin
 77             if a[i]<k then write(0);
 78             k:=k div 10;
 79           end;
 80         write(a[i]);
 81       end;
 82 end;
 83 
 84 procedure main;
 85 var
 86     i,j,k,last:longint;
 87 begin
 88     read(n);
 89     if n<4 then
 90     begin
 91       write(1);
 92       halt;
 93     end;
 94     dec(n,4);
 95     a[0]:=1;
 96     a[1]:=1;
 97     i:=0;
 98     b[0]:=1;
 99     b[1]:=1;
100     i:=1;
101     j:=trunc(n+pi);
102     while i<=trunc((n+pi)/pi) do
103       begin
104         last:=j;
105         j:=trunc(n+pi-i*pi);
106         for k:=last-1 downto j+1 do
107           begin
108             cheng(k+1);
109             chu(i+k);
110           end;
111         cheng(j+1);
112         chu(i);
113         inc(i);
114         jia;
115       end;
116     print;
117 end;
118 
119 begin
120     main;
121 end.
View Code

 

转载于:https://www.cnblogs.com/Randolph87/p/3599458.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之状态栏通知Notification、NotificationManager详解

在Android系统中,发一个状态栏通知还是很方便的。下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类: NotificationManager 、 Notification。 NotificationManager : 是状态栏通知的管理类,负责发通知…

Oracle Enterprises Manager 12C安装

前言 随着时代的进步与发展&#xff0c;Oracle官方于2012年12月1日起正式公布不再为Oracle10g版本提供免费的技术支持服务&#xff0c;而另一款新产品12C也即将面试&#xff0c;C即cloud&#xff0c;伴随着云计算的脚步&#xff0c;他终于粉墨登场了&#xff0c;熊熊第一时间下…

一个简单的MVC模式练习

控制层Action接受从模型层DAO传来的数据&#xff0c;显现在视图层上。 package Action;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;import DAO.StuDAO; import Model.Student; import Util.DBUtil;public class StuAction {public …

GraphQL 到底有什么魔力?

GraphQL 起源时间退回到 2012年的一个下午, 美国加利福尼亚州, facebook 的工程师们发现他们才上架没多久的移动端应用就收到了很多差评, 用户反映app响应慢&#xff0c;耗电严重等&#xff0c;经过分析后发现, 应用在第一次启动时, 会请求大量的后端api接口, 这其中包括用户自…

android root工具twrp,安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.

安装adb工具从以上地址下载,然后解压到任意目录(例如C:\adb).将此目录添加到windows环境变量path中.在cmd中输入adb, fastboot等命令,如果"显示"xxx"不是内部或外部命令命令",那么说明你弄错了,去了解一下什么是环境变量吧.如果显示一堆英文,那么说明安装完…

VBA即用型代码手册之打开有密码保护的工作薄

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

Android之使用getIdentifier()获取资源Id

使用getIdentifier()方法可以方便的获各应用包下的指定资源ID。主要有两种方法&#xff1a;&#xff08;1&#xff09;方式一Resources resources context.getResources();int indentify resources. getIdentifier( org.loveandroid.androidtest:drawable/icon", null, …

⑥又是星期五,小试牛刀(编写定制标签)

前言 今天有点迷茫。是身体累了&#xff0c;还是心累了。有种觉得想大哭而无力的感觉&#xff08;可能心还没成熟,或是昨天羽毛球打累了&#xff09;。加油&#xff0c;Jeff Li. 活在当下&#xff0c;坚持打好基础&#xff0c;坚持刷ACM&#xff0c;坚持coding。 今天下午的小故…

为什么要“男孩穷养、女孩富养”

所谓富养女&#xff0c;是说女儿要精细地养&#xff0c;就是在家庭经济条件许可的前提下&#xff0c;尽可能地满足女儿对物质的需求&#xff0c;送她们去参加钢琴、小提琴、音乐、形体等方面的训练&#xff0c;培养她们的高雅气质和大家闺秀的涵养……要从小宠她、爱她,培养她的…

技术分享|前端性能 关键性能指标以及测量工具介绍

源宝导读&#xff1a;对于一款商业软件产品而言&#xff0c;其性能表现往往会直接关系到它的生死存亡&#xff0c;这种说法一点也不夸张&#xff0c;数据显示&#xff0c;40&#xff05;的人放弃了加载时间超过3秒的网站。但是一个网页的加载时间&#xff0c;响应时间的“快”“…

ELKstack-Elasticsearch各类安装部署方法

手动安装部署Elasticsearch 开篇 开篇闲话&#xff0c;如果是新人在接触ELKstack什么都不懂的情况下&#xff0c;可以先看看各位前人写的关于ELKstack的博客&#xff0c;如何对ELKstack部署安装及使用&#xff0c;但是别人的东西只能作为借鉴&#xff0c;在自己搭建使用一定要以…

Android之 如何在退出一个activity后,很好的取消AsyncTask继续运行

public class Task extends AsyncTask<Void, Void, Void>{Override protected Void doInBackground(Void... path) { // Task被取消了&#xff0c;马上退出循环 if(isCancelled()) return null; }Override public void onProgressUpdate(File... files) { // Task被取消了…

美国超人气漫画科普书!85%以上中学物理考点,5岁孩子秒懂物理

▲ 点击查看今年的高考&#xff0c;不得不说&#xff0c;一度被浙江学霸刷屏&#xff01;他总分720分&#xff0c;物理等3门满分的成绩&#xff0c;最终获得“浙江高考状元”。状元能摘得桂冠&#xff0c;除了日积月累的不断努力外&#xff0c;最重要的是&#xff0c;不断调整自…

我的博客初始化

我是一名在读学生&#xff0c;平时没有摘抄、写日记、笔记之类的习惯&#xff0c;自从在amobbs上发了一篇lwip的移植记录&#xff0c;得到大家的回响&#xff0c;对自己的工作也有了极大的鼓舞作用&#xff0c;也开始学着写一些学习的笔记。记录生活和学习的点滴&#xff0c;经…

gevent 学习笔记一

import geventdef a():print a starting....gevent.sleep(1)print a endingdef b():print b starting....gevent.sleep(1)print b endinggevent.joinall([gevent.spawn(a), gevent.spawn(b) ]) 结果显示&#xff0c;用gevent并不会因为gevent.sleep而造成阻塞,但用内置的time.s…

在.Net环境下使用elasticsearch实现大数据量的搜索

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域&#xff0c;Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。Elasticsearch使用标准的RESTful API和JSON。我们还用多种语言构建和维护客户机&#xff0c;如Java、Pyth…

鸿蒙手机启动器apk下载,澪Pro启动器本体下载最新版

澪Pro启动器本体下载最新版专为我的世界的玩家们打造&#xff0c;可以在这里自由安装不同mod&#xff0c;也可以自定义编辑丰富的游戏内容&#xff0c;感受全新精彩的沙盒冒险玩法乐趣&#xff0c;更有丰富的资源和皮肤提供给玩家们&#xff0c;畅爽的玩法模式&#xff0c;沉浸…

当前联机日志损坏恢复

2019独角兽企业重金招聘Python工程师标准>>> 环境模拟 删除状态为active的联机日志&#xff0c;然后强行关闭数据库 处理过程 SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1260720 bytes Variable Size 1426071…

Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child

android 采用ScrollView布局时出现异常:ScrollView can host only one direct child。 解决办法:主要是ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLayout内部或 RelativeLayout等其他布局 如何解决ScrollView 和ListVi…