时间限制: 1Sec 内存限制: 128MB 提交: 1185 解决: 144
题目描述
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下
数列:
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<bits/stdc++.h>
using namespace std;
long long n;
long long C(int a,int b)
{
long long sum=1;
for(int i=a,j=1;j<=b;i--,j++)
{
sum=sum*i/j;
if(sum>n)
{
return sum;
}
}
return sum;
}
bool check(int k)
{
long long l=2*k;
long long r=max(l,n);
while(l<r)
{
int mid=l+r>>1;
if(C(mid,k)>=n)
{
r=mid;
}
else
{
l=mid+1;
}
}
if(C(r,k)!=n)return false;
else
{
cout<<(long long)((1+r)*r/2+(k+1));
return true;
}
}
int main()
{
cin>>n;
for(int i=16;;i--)
{
if(check(i))break;
}
return 0;
}