BZOJ5300:[CQOI2018]九连环——题解】的更多相关文章

今天做了传说中的CQOI六道板子题--有了一种自己很巨的错觉(雾 题面 求n连环的最少步数,n <= 1e5. 题解 首先--我不会玩九连环-- 通过找规律(其实是百度搜索)可知,\(n\)连环的最少步数是\(\lfloor\frac{2^{n + 1}}{3}\rfloor\). (实际上,九连环的步骤恰好是一个叫[格雷码]的编码方式中的\(1\)一直到\(2^{n+1}-1\)!) 然后我们要输出这个\(\lfloor\frac{2^{n + 1}}{3}\rfloor\)就好了. 然后我们…
一种打表的方法,适用于知道如何解九连环的人. 我们知道,解九(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\).…
题目链接 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&…
题目分析: 这道题是数学必修五的原题,做法如下图,书上讲得很详细了. 那么这道题目用快速幂就可以解决了,值得注意的是,分析时间复杂度会发现直接做乘法其实是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…
传送门 题意不好描述(自己看样例解释) 首先可以推出一个递推式: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-…
[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简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信道(可能被窃听)建立一个安全的密钥 \(K\),用于加密之后的通讯内容. 假定通讯双方名为 Alice 和 Bob,协议的工作过程描述如下(其中 \(\bmod\) 表示取模运算): 协议规定一个固定的质数 \(P\),以及模 \(P\) 的一个原根 \(g\).\(P\) 和 \(g\) 的数值都…
题面: 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…
破解D-H协议 列个式子会发现是BSGSBSGSBSGS的模板题,直接码就是了. 代码: #include<bits/stdc++.h> #include<tr1/unordered_map> #define ri register int using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))a…
思路:\(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......\) 有…