其他分享
首页 > 其他分享> > 2019牛客暑期多校训练营(第十场)

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