牛客第十场B 咖啡鸡
听着就很饿的题目。。。
运用递归的思想 去推 一开始我用了奇奇怪怪的函数 比如strcat() 去粘起来 然后发现这个函数好像只能用两三次。。
后来就学习别人的思路——递归 做了
1 #include<bits/stdc++.h> 2 typedef long long ll; 3 using namespace std; 4 const ll inf=1e12+10; 5 string s1="0COFFEE"; 6 string s2="0CHICKEN"; 7 ll s[1005]; 8 char findd(ll n, ll k) 9 { 10 if(n==1) return s1[k]; 11 if(n==2) return s2[k]; 12 if(k>s[n-2]) return findd(n-1,k-s[n-2]); 13 if(k<=s[n-2]) return findd(n-2,k); 14 } 15 int main() 16 { 17 s[1]=6,s[2]=7; 18 for(int i=3;i<=500;i++) 19 { 20 s[i]=min(inf,s[i-2]+s[i-1]);//min要俩个同类型的 21 } 22 ll T,n,k; 23 cin >> T; 24 while(T--) 25 { 26 cin >> n >> k; 27 for(ll i=k;i<k+10&&i<=s[n];i++)//i有两个条件 少了任一个都不能AC 28 { 29 cout <<findd(n,i); 30 } 31 cout << endl; 32 } 33 return 0; 34 }
递归只要细心应该挺好推的~