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;
}