Coffee Chicken
题意:
给定两个字符串构成斐波拉契数列,问第n个字符串的从第k个字符开始的10个字符。
思路:
因为k最大是1e12。所以预处理500个即可,然后递归求解。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[510],k;
const ll maxn=1e12+9;
string s1="COFFEE",s2="CHICKEN";
void get(int x,ll num){
if(x==1)
cout<<s1[num-1];
if(x==2)
cout<<s2[num-1];
if(x<=2)
return ;
if(f[x-2]>=num)
get(x-2,num);
else get(x-1,num-f[x-2]);
}
int main(){
f[1]=6,f[2]=7;
for(int i=3;i<=500;++i)
f[i]=min(maxn,f[i-1]+f[i-2]);
int T,n;
cin>>T;
while(T--){
cin>>n>>k;
for(ll i=k;i<k+10&&i<=f[n];++i)
get(n,i);
puts("");
}
return 0;
}