欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【组合数+思维+二分】杨辉三角形

时间:2023-04-25
题目

3418、杨辉三角形 - AcWing题库 

解释

每一行左右两半都是重复的,所以直接考虑左半部分对于每一行i每一列j的值可以用组合数C(i,j)表示数据范围不超过1e9,而C(34, 17) > 1e9, C(32, 16) < 1e9因此对于C(a,b),b不会超过16又因为随意框选出来一个三角形,可以发现最下角的数一定是最大的且从该图可以看出对于每一行最后一个元素(可以近似看成一列)从上到下是单调递增的所以固定b,对a进行二分查找,最下角是C(2*b,b)因此l=2*k,r=n代码段

#includeusing namespace std;#define ll long longint n;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=2*k,r=n; while(l=n)r=mid; else l=mid+1; } if(c(l,k)!=n)return false; else { cout<>n; for(int k=16; ;k--) { if(check(k))break; } return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。