CodeForces - 735C Tennis Championship
题意:一个淘汰赛制比赛,规定比赛的双方的胜场不超过一场,输入人数,输出冠军能够参加的最大比赛场数
思路:一开始没有注意比赛双方胜场不超过一场,错,转变一下思维,用 F[i] 数组表示最大比赛场数为 i 场时所需要的最小人数,在冠亚军比赛之前
冠军赢了 i - 1 场,并且与冠军比赛的人和与亚军比赛的人是没有交集的,要的是最小人数,所以亚军是赢了i - 2 场比赛,所以有递推公式F[i] = F[i-1]
+ F[i-2],即斐波那契数列,输出第一个大于n的F[i] 的 i-1;
#include<iostream>
using namespace std;
long long a[200];
const long long MAXN=1e18;
int main(void)
{
long long n;
cin>>n;
a[1]=2;
a[2]=3;
int i=2;
while(a[i]<=MAXN)
{
i++;
a[i]=a[i-1]+a[i-2];
}
int j=1;
while(n>=a[j])
j++;
cout<<j-1;
return 0;
}
本文解析了CodeForces-735C Tennis Championship问题,通过使用斐波那契数列推导出冠军最多可能参加的比赛场次。文章详细介绍了如何根据题目要求构建递推公式,并实现相应的算法。
&spm=1001.2101.3001.5002&articleId=77769187&d=1&t=3&u=8cdcce56f4bc4242a46330c3371cacf3)
242

被折叠的 条评论
为什么被折叠?



