1.杨辉三角可以用组合数表示

2.杨辉三角是对称的,可以只看前半部分

3.将三角形斜过来观察,从下往上搜索


#include <iostream>

#include <cstring>

#include <algorithm>

using namespace std;

typedef long long LL;

int 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 = k * 2, r = max((LL)n, l);

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 -- )

if (check(k))

break;

return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论