题解:P11156 【MX-X6-T2】もしも

\(10^9\) 的范围,暴力肯定不行,需要找一下规律。

构造一个长度为 \(n\) 的序列 \(\left\{a_n\right\}\),令 \(a_n=x\),我们的目的是找到 \(a_1,a_2\)\(n,x\) 的关系。

假设该序列有一个虚拟的项 \(a_{n+1}\),这样我们根据 \(a_i=\left\lceil \dfrac{a_{i-2}}{a_{i-1}}\right\rceil\) 就可以通过 \(a_n\)\(a_{n+1}\) 的值往下一直推得该序列的所有项的值了。

为简化问题,不妨令 \(a_{n+1}=1\),由于 \(a_{n+1}=\left\lceil \dfrac{a_{n-1}}{a_n}\right\rceil\),因此可构造 \(a_{n-1}=1\) 来满足要求。而又因为 \(a_{n}=\left\lceil \dfrac{a_{n-2}}{a_{n-1}}\right\rceil\)\(a_{n-2}\) 满足 \(x=\left\lceil a_{n-2}\right\rceil\),很容易想到构造 \(a_{n-2}=x\) 来满足要求。

注意到 \(a_{n-2},a_{n-1},a_n,a_{n+1}\) 的值分别为 \(x,1,x,1\),出现了 \(x,1\) 交替出现的情况,那么继续按照上面的构造方法就可以构造出一个 \(x,1\) 交替出现的序列。所以有如下规律:当序列中某一项的下标 \(i\)\(n\) 的奇偶性相同时,则 \(a_i=a_n\);否则 \(a_i=1\)

所以可以构造出的二元组 \((a_1,a_2)\) 满足:

\[\begin{cases} a_1=1,a_2=a_n & 2\mid n \\ a_1=a_n,a_2=1 & 2\nmid n \end{cases} \]

附 AC 代码:

#include<bits/stdc++.h>
using namespace std;
int T;
int main()
{
	cin >> T;
	while(T --)
	{
		int n, an;
		scanf("%d%d", &n, &an);
		if(n % 2 == 1) printf("%d 1\n", an);
		else printf("1 %d\n", an);
	}
	return 0;
}
posted @ 2025-05-08 18:49  cold_jelly  阅读(5)  评论(0)    收藏  举报