P8749 [蓝桥杯 2021 省 B] 杨辉三角形
题目描述
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:
1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,…1,1,1,1,2,1,1,3,3,1,1,4,6,4,1, \ldots1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,…
给定一个正整数 NNN,请你输出数列中第一次出现 NNN 是在第几个数。
输入格式
输入一个整数 NNN 。
输出格式
输出一个整数代表答案。
输入输出样例 #1
输入 #1
6
输出 #1
13
说明/提示
对于 20%20 \%20% 的评测用例, 1≤N≤101 \leq N \leq 101≤N≤10;
对于所有评测用例, 1≤N≤1091 \leq N \leq 10^91≤N≤109 。
蓝桥杯 2021 第一轮省赛 B 组 H 题。
C++实现
#include<cstdio>
typedef long long LL;
const LL INF=1e9;
LL n;
LL C(LL a,LL b){
LL res=1;
for(LL i=a,j=1;j<=b;i--,j++){
res=res*i/j;
if(res>n) // fixed
return res;
}
return res;
}
int main(){
scanf("%lld",&n);
if(n==1){
printf("1");
return 0;
}
for(int i=16;i>=0;i--){
LL l=2*i,r=INF,mid,lim;
while(l<=r){
mid=(l+r)>>1,lim=C(mid,i);
if(lim==n){
printf("%lld",(mid+1)*mid/2+i+1);
return 0;
}else if(lim<n)
l=mid+1;
else{
r=mid-1;
}
}
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容