传送门

 

 

B.Coffee Chicken(递归)

•题意

  定义 S1 = "COFFEE" , S2 = "CHICKEN";

  Si = Si-2 + Si-1

  求在 Sn 中,以第 k 个字符开始的连续 10 个字符;

  k ≤ min( |Sn| , 1012);

•Code

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 
 5 int n;
 6 ll k;
 7 ll f[80];
 8 string s[3];
 9 
10 string F(ll l,ll r,int pos)
11 {
12 //    printf("pos=%d,(%lld,%lld)\n",pos,l,r);
13     if(pos <= 2)
14         return s[pos].substr(l,r-l+1);
15 
16     ll mid=f[pos-2];
17 
18     string ans;
19     if(r <= mid)
20         return F(l,r,pos-2);
21     else if(l > mid)
22         return F(l-mid,r-mid,pos-1);
23     else
24     {
25 //        ans=F(l,mid,pos-2)+F(1,r-mid,pos-1);
26         ans=F(l,mid,pos-2);
27         ans += F(1,r-mid,pos-1);
28     }
29     return ans;
30 }
31 string Solve()
32 {
33     if(n > 60)
34         n=(n&1 ? 59:60);
35 
36     cout<<F(k,min(k+9,f[n]),n)<<endl;
37 }
38 void Init()
39 {
40     s[1]="#COFFEE";
41     s[2]="#CHICKEN";
42     f[1]=6;
43     f[2]=7;
44     for(int i=3;i <= 60;++i)
45         f[i]=f[i-1]+f[i-2];
46 }
47 int main()
48 {
49     Init();
50 
51     int T;
52     cin>>T;
53     while(T--)
54     {
55         cin>>n>>k;
56         Solve();
57     }
58 }
View Code

相关文章:

  • 2022-03-07
  • 2021-08-05
  • 2021-10-29
猜你喜欢
  • 2022-02-09
  • 2021-07-26
  • 2021-12-15
  • 2021-08-31
  • 2021-10-27
相关资源
相似解决方案