传送门 题意不好描述(自己看样例解释) 首先可以推出一个递推式:fn=fn−1+2fn−2+1f_n=f_{n-1}+2f_{n-2}+1fn​=fn−1​+2fn−2​+1 然后可以构造两个等式: (fn+fn−1+1)=2(fn−1+fn−2+1)(f_n+f_{n-1}+1)=2(f_{n-1}+f_{n-2}+1)(fn​+fn−1​+1)=2(fn−1​+fn−2​+1) (fn−2fn−1−12)=−(fn−1−fn−12)(f_n-2f_{n-1}-\frac12)=-(f_{n-…
题目分析: 这道题是数学必修五的原题,做法如下图,书上讲得很详细了. 那么这道题目用快速幂就可以解决了,值得注意的是,分析时间复杂度会发现直接做乘法其实是O(n^2)的,但是有一个1/20左右的常数,可能可以卡进去.为了追求稳定,考虑采用FFT优化. emm,,,FFT做这种题是大材小用吧,用python写吧,理由是python的乘法是用fft实现的. 代码: t=input() count=0 while(count<t): try: a=input() x=2**(a+1) if a % 2…
今天做了传说中的CQOI六道板子题--有了一种自己很巨的错觉(雾 题面 求n连环的最少步数,n <= 1e5. 题解 首先--我不会玩九连环-- 通过找规律(其实是百度搜索)可知,\(n\)连环的最少步数是\(\lfloor\frac{2^{n + 1}}{3}\rfloor\). (实际上,九连环的步骤恰好是一个叫[格雷码]的编码方式中的\(1\)一直到\(2^{n+1}-1\)!) 然后我们要输出这个\(\lfloor\frac{2^{n + 1}}{3}\rfloor\)就好了. 然后我们…
题目链接 BZOJ5300 题解 这题真的是很丧病,,卡高精卡到哭 我们设\(f[i]\)表示卸掉前\(i\)个环需要的步数 那么 \[f[i] = 2*f[i - 2] + f[i - 1] + 1\] 直接高精递推不仅\(MLE\)而且\(TLE\) 然后就要用到数学求通项公式,或者打表找规律 \[f[n] = \lfloor \frac{2^{n + 1}}{3} \rfloor\] 高精乘低精就可以过了 #include<algorithm> #include<iostream&…
[BZOJ5300][CQOI2018]九连环 (高精度,FFT) 题面 BZOJ 洛谷 题解 去这里看吧,多么好 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; #define MAX 150000 const double Pi=acos(-1); inline int read() { int x=0;bool t=fa…
题面: CQOI2018九连环 分析: 个人认为这道题没有什么价值,纯粹是为了考算法而考算法. 对于小数据我们可以直接爆搜打表,打表出来我们可以观察规律. f[1~10]: 1 2 5 10 21 42 85 170 341 682 我们可以发现的规律是,当i为奇数时,f[i]=f[i-1]*2+1,偶数时f[i]=f[i-1]*2. 既然这样,我们可以推断通项公式是否跟2的次幂有关. 我们连蒙带猜连导带推,可以得出,f[i]=2^(i+1)/3(下取整). 再结合数据范围,我们可以决定是写ff…
一种打表的方法,适用于知道如何解九连环的人. 我们知道,解九(n)连环必须先解第九(n)环,然后解八(n-1).七(n-2)-- 根据这个我们飞快的写出了一个递推式,设\(f[i]\)为\(i\)连环的最少步,则: \(f[i]=f[i-1]+f[i-2]*2+1\) 然后推到这里就不会了.(如果有人知道怎么解的话欢迎交流) 但是如果你用这个方法打表的话就会发现: 当\(i\)为奇数的时候有\(f[i]=f[i-1]*2+1\); 当\(i\)为偶数的时候有\(f[i]=f[i-1]*2\).…
嘟嘟嘟 对于这种找规律的题,我向来是不会的. 通过大佬们的各种打表找规律.神奇dp等方法,我们得到了答案就是\(\lfloor \frac{2 ^ {n + 1}}{3} \rfloor\). 高精是显然的,但是还得用fft,毕竟这是省选题. 刚开始我一运行就RE,都不让你输入,后来才发现是数组开到1e6太大了(这怎么就大了!?) 其次别忘了高精里面的数都是倒着存的,所以做除法的时候得倒着来,最后再把数组倒过来. 然后高精fft借鉴了一下兔哥的代码,把原来的代码简化了许多. #include<c…
思路:\(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......\) 有…
贴板子啦-- FFT板子:luogu P3803 [模板]多项式乘法(FFT) #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> #include<cctype> #include<vector> #include<stack> #in…