思路:\(DP\)

提交:\(2\)次

错因:高精写挂(窝太菜了)

题解:

观察可知\(f[i]=2*f[i-1]+(n\&1)\)

高精的过程参考了WinXP@luogu的思路:

发现一个问题。每一项约等于前一项的 \(2\) 倍。仔细分析,发现

\(dp(n)=2dp(n-1)+ (n\& 1)?1:0\)

既然是 \(2\) 倍,为什么不打一下 \(2\) 进制表示呢?

\(1\ 10 \ 101 \ 1010 \ 10101 \ 101010 \ 1010101......\)

有点意思。

其实也很容易能从\(dp\) 中发现这个规律,每当 \(n\) 为奇数时 \(++\) ,就会使每隔 \(1\)位 \(+1\)。

这也不太好办。 \(n=1e5\) 时,这个 \(2\) 进制数就有 \(1e5\) 位。 \(10\) 进制的高精位数只知道比 \(1e5\) 小却没有办法确定。隔一位一个 \(1\) 也不方便化成 \(10\) 进制啊。不过好像没有什么好办法能直接从 \(2\) 进制的高精转化为 \(10\) 进制的高精。(仅为思考过程)

能不能直接从 \(10\) 进制的高精推过来呢?

如果是二进制表示是 \(1000000....\) ,它就可以轻松地表示为 \(2^n\) 然后用快速幂做了。

那么现在考虑对这个 \(2\) 进制数 \(×3\) 。哦不对,是 \(11\) 。我们来看变成了什么。。

\(11 \ 110 \ 1111 \ 11110 \ 111111 \ 1111110 ......\)

这就可以说是非常显然了吧。( +1 或 +2 变成 10000... )

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#define ll unsigned long long
#define RR register ll
#define R register int
using namespace std;
const int B=1e+8,N=6010;
namespace Luitaryi {
int T,n,sz1,sz2;
ll ret[N],a[N];
inline void mul(ll a[N],int& sz1,ll b[N],int sz2) {
RR tmp[N]; memset(tmp,0,sizeof(tmp)); for(R i=0;i<=sz1;++i)
for(R j=0;j<=sz2;++j) tmp[i+j]+=a[i]*b[j];
sz1+=sz2; for(R i=0;i<=sz1;++i) tmp[i+1]+=tmp[i]/B,tmp[i]%=B;
while(tmp[sz1+1]) ++sz1,tmp[sz1+1]+=tmp[sz1]/B,tmp[sz1]%=B;
memcpy(a,tmp,sizeof(tmp));
}
inline void main() {
scanf("%d",&T); while(T--) {
scanf("%d",&n); R p=n+1; memset(a,0,sizeof(a)),memset(ret,0,sizeof(ret));
ret[0]=1,a[0]=2; sz1=sz2=0; while(p) {
if(p&1) mul(ret,sz2,a,sz1); p>>=1;
if(p) mul(a,sz1,a,sz1);
} if(n&1) ++ret[0]; ret[0]-=2; if(ret[0]<0) ret[0]+=B,--ret[1];
RR k=0; for(R i=sz2;i>=0;--i) k=k*B+ret[i],ret[i]=k/3,k%=3;
while(!ret[sz2]) --sz2; printf("%llu",ret[sz2]);
for(R i=sz2-1;i>=0;--i) printf("%08llu",ret[i]); putchar('\n');
}
}
} signed main() {Luitaryi::main(); return 0;}

2019.08.23

77

P4461 [CQOI2018]九连环的更多相关文章

  1. 【BZOJ5300】[CQOI2018]九连环 (高精度,FFT)

    [BZOJ5300][CQOI2018]九连环 (高精度,FFT) 题面 BZOJ 洛谷 题解 去这里看吧,多么好 #include<iostream> #include<cstdi ...

  2. CQOI2018 九连环 打表找规律 fft快速傅里叶变换

    题面: CQOI2018九连环 分析: 个人认为这道题没有什么价值,纯粹是为了考算法而考算法. 对于小数据我们可以直接爆搜打表,打表出来我们可以观察规律. f[1~10]: 1 2 5 10 21 4 ...

  3. # BZOJ5300 [CQOI2018]九连环 题解 | 高精度 FFT

    今天做了传说中的CQOI六道板子题--有了一种自己很巨的错觉(雾 题面 求n连环的最少步数,n <= 1e5. 题解 首先--我不会玩九连环-- 通过找规律(其实是百度搜索)可知,\(n\)连环 ...

  4. BZOJ5300:[CQOI2018]九连环——题解

    一种打表的方法,适用于知道如何解九连环的人. 我们知道,解九(n)连环必须先解第九(n)环,然后解八(n-1).七(n-2)-- 根据这个我们飞快的写出了一个递推式,设\(f[i]\)为\(i\)连环 ...

  5. [CQOI2018]九连环

    嘟嘟嘟 对于这种找规律的题,我向来是不会的. 通过大佬们的各种打表找规律.神奇dp等方法,我们得到了答案就是\(\lfloor \frac{2 ^ {n + 1}}{3} \rfloor\). 高精是 ...

  6. BZOJ5300 [Cqoi2018]九连环 【数学】【FFT】

    题目分析: 这道题是数学必修五的原题,做法如下图,书上讲得很详细了. 那么这道题目用快速幂就可以解决了,值得注意的是,分析时间复杂度会发现直接做乘法其实是O(n^2)的,但是有一个1/20左右的常数, ...

  7. 2019.01.02 bzoj5300: [Cqoi2018]九连环(fft优化高精+快速幂)

    传送门 题意不好描述(自己看样例解释) 首先可以推出一个递推式:fn=fn−1+2fn−2+1f_n=f_{n-1}+2f_{n-2}+1fn​=fn−1​+2fn−2​+1 然后可以构造两个等式: ...

  8. BZOJ5300 [Cqoi2018]九连环 【dp + 高精】

    题目链接 BZOJ5300 题解 这题真的是很丧病,,卡高精卡到哭 我们设\(f[i]\)表示卸掉前\(i\)个环需要的步数 那么 \[f[i] = 2*f[i - 2] + f[i - 1] + 1 ...

  9. yyb省选前的一些计划

    突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...

随机推荐

  1. 100天搞定机器学习|Day3多元线性回归

    前情回顾 [第二天100天搞定机器学习|Day2简单线性回归分析][1],我们学习了简单线性回归分析,这个模型非常简单,很容易理解.实现方式是sklearn中的LinearRegression,我们也 ...

  2. Codeforces 1249 E. By Elevator or Stairs?

    传送门 首先显然下楼的操作一定是不优的,所以只要考虑上楼 设 $f[i]$ 表示到第 $i$ 层时需要的最少时间 那么首先考虑走楼梯,有转移,$f[i]=f[i-1]+a[i-1]$ 然后考虑坐电梯有 ...

  3. 2019牛客多校四 E. triples II (容斥)

    大意: 给定$n,a$, 求$n$个$3$的倍数, $or$和为$a$的方案数. 简单容斥题 可以求出$f_{x,y}$表示所有$3$的倍数中, 奇数位不超过$x$个$1$, 偶数位不超过$y$个$1 ...

  4. Admui相关第三方插件

    ace 版本:1.2.3au 官网:https://github.com/ajaxorg/ace-builds/ 许可:BSD 依赖:无 DataAPI:data-pulgin="ace&q ...

  5. (一)ORM基础

    一.ORM思想解析 要了解学习Hibernate框架,就不得不提到ORM思想,因为Hibernate就是基于ORM思想的一个产品. 1.1 介绍 广义上,ORM指的是面向对象的对象模型和关系型数据库的 ...

  6. 五、小程序wx:key中的关键字*this

    “保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如果是对象则不可以 data:{ array:[1,2,3,4,5], ob ...

  7. Quartz任务调度:MisFire策略和源码分析

    Quartz是为大家熟知的任务调度框架,先看看官网的介绍: ---------------------------------------------------------------------- ...

  8. Spring MVC通过拦截器处理sql注入、跨站XSS攻击风险

    sql注入就是通过url或者post提交数据时候,字符串类型的参数会被别人利用传入sql语句,最终破坏数据库或者达到一些见不得人的目的. 有时候因为业务需要url中会带一些参数,比如 ?type=xx ...

  9. gitlab自动化部署CI案例

    参考: https://blog.csdn.net/hxpjava1/article/details/78514999   (简单操作) https://blog.csdn.net/wh211212/ ...

  10. 第五章、drf-JWT认证

    目录 JWT认证 JWT认证方式与其他认证方式对比: 优点 格式 drf - jwt 插件 官网 安装 token的签发与校验初识: 签发token 校验token 自定义drf-jwt配置 sett ...