首页 > 其他分享 >CF1924C

CF1924C

时间:2024-02-24 21:59:42浏览次数:22  
标签:qpow frac CF1924C int sqrt times 正方形

发现这个东西有一种隐隐约约的递推藏在里面,然后发现确实是递推。

具体的,我们注意到一个正方形先进行第一次折,我们发现实际上它分成了 \(4\) 个小正方形,这四个小正方形是互相独立的,然后折完一次后它们都变成了一个三角形,我们试着分析每个三角形在后一次是怎么折的,发现折完以后还会是一个小三角形。

于是我们设 \(f_i\) 表示已经折完 \(n\) 次后展开 \(i\) 次的每个小三角形(或第一次折之前的小正方形)的凹痕长度和, \(g_i\) 则表示凸痕长度和,然后考虑转移。

首先,转移其实就是想象它折完之后再打开的过程,于是我们可以推出:

\[f_i=\frac{f_{i-1}+g_{i-1}}{\sqrt 2}+1 \]

\[g_i=\frac{f_{i-1}+g_{i-1}}{\sqrt 2} \]

发现 \(f_i=g_i+1\),那么最后要求的 \(\frac{M}{V}\) 就是 \(\frac{g_n}{g_n+1}=1-\frac{1}{g_n+1}\),由于我们只关心最后求出的 \(b\),所以只计算 \(-\frac{1}{g_n+1}\) 就行了。

然后我们考虑把 \(f_i\) 像虚数一样表示成 \(x+y\sqrt 2\),\(g_i\) 同理,至于怎么求我想到了两种方法:

1.矩阵乘法,直接转移即可。

2.继续推式子,根据这个上面关于 \(g_i\) 的两个式子还可以得到 \(g_i=\sqrt 2 \times g_{i-1}+\frac{\sqrt 2}{2}\),对于这种 \(g_i=k\times g_{i-1}+w\) 可以转换成另一种形式,\(h_i=g_i+v,h_i=k \times h_{i-1}\),解个方程发现有 \(h_i=g_i+1+\frac{\sqrt 2}{2},h_i=\sqrt 2 \times h_{i-1}\),其中 \(h_1=1+\frac{\sqrt 2}{2}\),然后就有 \(g_n+1=(1+\frac{\sqrt 2}{2})\sqrt 2^{n-1}-\frac{\sqrt 2}{2}\),简化一下:

\[\frac{1}{g_n+1}=\frac{1}{2^{\frac{n-1}{2}}+2^{\frac{n-2}{2}}-2^{-\frac{1}{2}}} \]

最后分类讨论 \(n\) 的奇偶性求出 \(x\) 和 \(y\),然后分母有理化就可以求出 \(b\) 了。

代码:

void solve ()
{
	int n = rd ();
	if (n & 1)
	{
		int x = qpow (2, (n + 1) >> 1);
		int y = 1 - qpow (2, (n - 1) >> 1);
	} else
	{
		int x = qpow (2, n >> 1);
		int y = 1 - x;
	}
	printf ("%lld\n", ((- 2 * y * qpow ((x * x - y * y * 2) % P, P - 2)) % P + P) % P);
}

标签:qpow,frac,CF1924C,int,sqrt,times,正方形
From: https://www.cnblogs.com/lalaouyehome/p/18031663

相关文章