试题H:杨辉三角形
时间限制: 1.0s内存限制:256.0MB本题总分:20分
【问题描述】
下面的图形是著名的杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
... ... ...
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下
数列:
1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,...
给定一个正整数N,请你输出数列中第一次出现N是在第几个数?
【输入格式】
输入一个整数N。
【输出格式】
输出一个整数代表答案。
【样例输入】
6
【样例输出】
13
【评测用例规模与约定】
对于20%的评测用例,1≤N≤10;
对于所有评测用例,1≤N≤1000000000。
#include <iostream>
#include <csting>
#include <algorithm>
typedef long long LL;
LL C(int a,int b)
{
LL res = 1;
for(int i = a,j= 1;j<=b;i--,j++)
{
res = res*i/j;
if(res>n) return res;
}
return res;
}
bool check(int k)
{
LL l =k*2,r =n;
while(l<r)
{
LL mid = l+r>>1;
if(C(mid,k >= n) r = mid;
else l =mid+1;
}
if(C(r,k) != n) return false;
cout << r*(r+1) /2 +k +1 << endl;
return true;
}
int main()
{
cin >> n;
for(int k = 16;;k--) //k从16开始
if(check(k)) //看看里面有没有
break;
return 0;
}
样例输入:6
样例输出:13