2019牛客暑期多校训练营(第十场)
作者:互联网
B.Coffee Chicken
题意:
定义\(s(1)=\)"COFFEE",\(s(2)=\)"CHICKEN",\(s(n)=s(n-2)+s(n-1)\)。
现在要求\(s(n)\)的第\(k\)个,\(1\leq n\leq 500,1\leq k\leq 10^{12}\)。
思路:
因为\(k\)比较小,递归求解即可。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 505;
const ll MAX = 1e12;
int T;
ll f[N];
ll n, k;
char query(int n, ll k) {
if(n == 1) {
return "COFFEE"[k - 1];
} else if(n == 2) {
return "CHICKEN"[k - 1];
} else {
if(k <= f[n - 2]) return query(n - 2, k);
else return query(n - 1, k - f[n - 2]);
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
f[1] = 6, f[2] = 7;
for(int i = 3; i < N; i++) {
f[i] = min(MAX + 20, f[i - 1] + f[i - 2]);
}
cin >> T;
while(T--) {
cin >> n >> k;
for(ll i = k; i < min(k + 10, f[n] + 1); i++) cout << query(n, i);
cout << '\n';
}
return 0;
}
标签:COFFEE,const,leq,int,ll,多校,牛客,2019,CHICKEN 来源: https://www.cnblogs.com/heyuhhh/p/11379282.html