题目:3418. 杨辉三角形


我也不会写这题,只会暴力,但是会超时,附上大佬的解题思路
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n;
LL cu(LL a,int b){
LL res=1;
for(LL i=a,j=1;j<=b;j++,i--){
res=res*i/j;
if(res>n) break;
}
return res;
}
bool check(int k){
LL l=2*k;
LL r=max(l,n);
while(l<r){
LL mid=l+r>>1;
if(cu(mid,k)>=n) r=mid;
else l=mid+1;
}
if(cu(r,k)!=n) return 0;
printf("%lld",1ll*(r+1)*r/2+k+1);
return 1;
}
int main(){
scanf("%lld",&n);
for(int i=17;i>=0;i--){
if(check(i)) break;
}
return 0;
}

本文分享了如何使用C++实现杨辉三角形的高效算法,避免暴力计算导致的时间复杂度过高。通过大佬的解题思路,学习优化递推计算并找到检查数的正确范围,提高代码运行效率。
&spm=1001.2101.3001.5002&articleId=123476808&d=1&t=3&u=0b2903c938fb4bc5979dbc1a41ccb1e7)
1012

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



