zoukankan      html  css  js  c++  java
  • 2019牛客多校第十场B.Coffee Chicken(递归)

    题目传送门

    题意

    第1个字符串为"COFFEE",第2个字符串为"CHICKEN",第n个字符串由其前2个和前1个连接而成(即s[n]=s[n-2]+s[n-1],注意s[n-2]在s[n-1]的前面),询问第n个字符串从第k个字符开始的连续10个字符是什么(如果还未有10个字符但到达字符串末尾时要停止)

    1n500
    1kmin{S(n),101}. (|S| denotes the length of string s)

     题解

    Code

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll inf=1e12+10;//k最大为1e12,加上要输出10位,所以inf可取值1e12+10
    const int maxn=5e2+10;
    ll s[maxn];
    string ans1="COFFEE",ans2="CHICKEN";
    char solve(ll n,ll k)
    {
        if(n==1)return ans1[k-1];//数组从0开始,而k从1开始,故需-1
        else if(n==2)return ans2[k-1];
        if(k>s[n-2])
            return solve(n-1,k-s[n-2]);
        else
            return solve(n-2,k);
    }
    int main()
    {
        /*预处理字符串长度*/
        s[1]=6,s[2]=7;
        for(int i=3;i<=500;i++)
            s[i]=s[i-2]+s[i-1]<=inf?s[i-2]+s[i-1]:inf;//当s[i]>1e12+10时,后面都令等于1e12+10,否则会溢出
            
        int T;
        cin>>T;
        ll n,k;
        while(T--)
        {
            cin>>n>>k;
            for(ll i=k;i<k+10&&i<=s[n];i++)//一个个输出,到10个或超过了字符串总长度就停止(注意这里i要longlong)
                cout<<solve(n,i);
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    java之数组使用以及拓展
    Java之数组介绍
    方法
    break&continue
    networkmanager is not running 网络管理没有运行
    CentOS-7修改IP
    操作系统
    计算机基础理论
    编码和解码
    pyQuery库
  • 原文地址:https://www.cnblogs.com/HOLLAY/p/11413979.html
Copyright © 2011-2022 走看看