题解: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;
}