Skip to main content
174 words1 min

题解:P8241 [COCI 2013/2014

题意简述

屏幕初始为 A\texttt A。每按一次按钮,每个 A\texttt A 变成 B\texttt B,每个 B\texttt B 变成 BA\texttt{BA}。求按 kk 次后 A\texttt AB\texttt B 各有多少个。

解题思路

只需计数,不必真的拼出字符串。设按 ii 次后有 aia_iA\texttt Abib_iB\texttt BAB\texttt A\to\texttt B 产生 11B\texttt BBBA\texttt B\to\texttt{BA} 产生 11A\texttt A11B\texttt B,于是

{ai=bi1bi=ai1+bi1\begin{cases} a_i=b_{i-1}\\ b_i=a_{i-1}+b_{i-1} \end{cases}

(a0,b0)=(1,0)(a_0,b_0)=(1,0) 递推 kk 步即可,数列恰是斐波那契。

时间复杂度为 O(k)O(k)

参考代码

221 Bcpp
#include <bits/stdc++.h>
using namespace std;

int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int k;
cin>>k;
int a=1,b=0;
while(k--)
{
int t=a;
a=b;
b=t+b;
}
cout<<a<<' '<<b<<'\n';
return 0;
}