[蓝桥杯 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 题。

思路

首先明确杨辉三角形中第i行第j列的数可以表示成组合数 c(i,j)的形式
由于杨辉三角左右对称,显然左边的数更小,所以去除右边的数1 1   2  ---> C(2, 1)1   3                             ---> C(2n, n)1   4   6  ---> C(4, 2)1   5   10
1   6   15  20 ---> C(6, 3)性质:1. 每一斜行从上到下递增,且每一斜行的第一个值为 C(2n, n)2. 每一横行从中间到两边依次递减3. 第(i+1)斜行每个数一定大于第i个斜行每个数要查找的数N<=1e9
C(34, 17) > 1e9, C(32, 16) < 1e9,因此只要枚举前16个斜行即可当查找某个数什么时候第一次出现时
只需要倒序查找它在哪个斜行(16个,枚举即可)
再在此斜行中找出>=它的第一个数
(在斜行中查找,每一斜行递增,可以利用二分)
即可求出它最先出现的地方

二分

k表示第k个斜行,(从0开始)
二分的左右端点:l:2k,r:max(n, l)右端点一定不能比左端点小!特例:否则当n=1时,会出问题!

确定答案

找出斜行中的第几个数
如何确定它在杨辉三角中位于第几个数
杨辉三角第一行1个数第二行2个数...第i行i个数C(r, k)对应的顺序值为:(r + 1) * r / 2 + k + 1

代码

#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;
}

[蓝桥杯 2021 省 B] 杨辉三角形相关推荐

  1. 【蓝桥杯经典数学题】杨辉三角形

    杨辉三角形 杨辉三角一图览 前言 求杨辉三角任意一行 求杨辉三角某一值起始位置 杨辉三角一图览 11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 1 6 15 20 15 ...

  2. 蓝桥杯2021年第十二届省赛-杨辉三角形

    蓝桥杯2021年第十二届省赛真题-杨辉三角形 - C语言网 (dotcpp.com)https://www.dotcpp.com/oj/problem2610.html 参考: 2021第十二届蓝桥杯 ...

  3. 第十二届蓝桥杯 2021年省赛真题 (Java 大学B组) 第一场

    蓝桥杯 2021年省赛真题 (Java 大学B组 ) #A ASC #B 卡片 朴素解法 弯道超车 #C 直线 直线方程集合 分式消除误差 平面几何 #D 货物摆放 暴力搜索 缩放质因子 #E 路径 ...

  4. 第十二届蓝桥杯 2021年省赛真题 (C/C++ 大学B组)

    蓝桥杯 2021年省赛真题 (C/C++ 大学B组 ) #A 空间 #B 卡片 #C 直线 #D 货物摆放 #E 路径 #F 时间显示 #G 砝码称重 背包 DP #H 杨辉三角形 #I 双向排序 贪 ...

  5. 第十二届蓝桥杯 2021年省赛真题 (Java 大学A组) 第一场

    蓝桥杯 2021年省赛真题 (Java 大学A组 ) #A 相乘 朴素解法 同余方程 #B 直线 直线方程集合 分式消除误差 平面几何 #C 货物摆放 暴力搜索 缩放质因子 #D 路径 搜索 单源最短 ...

  6. 第十二届蓝桥杯 2021年省赛真题 (C/C++ 大学A组) 第一场

    蓝桥杯 2021年省赛真题 (C/C++ 大学A组 ) #A 卡片 #B 直线 #C 货物摆放 #D 路径 #E 回路计数 #F 砝码称重 背包 DP #G 异或数列 #H 左孩子右兄弟 #I 括号序 ...

  7. 第十二届蓝桥杯 2021年国赛真题 (Java 大学A组)

    蓝桥杯 2021年国赛真题(Java 大学 A 组 ) #A 纯质数 按序枚举 按位枚举 #B 完全日期 朴素解法 朴素改进 #C 最小权值 动态规划 #D 覆盖 变种八皇后 状压 DP #E 123 ...

  8. 第十二届蓝桥杯 2021年国赛真题 (C/C++ 大学A组)

    蓝桥杯 2021年国赛真题(C/C++ 大学 A 组 ) #A 纯质数 #B 完全日期 #C 最小权值 #D 覆盖 #E 123 #F 异或变换 #G 冰山 #H 翻转括号序列 #I 异或三角 #J ...

  9. 蓝桥杯2021国赛太原理工大学获得14枚奖牌

    在2021年6月5日举行的蓝桥杯国赛中,太原理工大学共获得14枚奖牌. 软件类获得二等奖6个,三等奖5个. 电子类的单片机比赛中,获得一等奖1个,二等奖1个三等奖1个.

最新文章

  1. [CF413D]2048
  2. 程序员的爱情 第十二章
  3. Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务-Eclipse和Maven项目
  4. 处理字符集中的算式问题
  5. LeetCode 491. 递增子序列(回溯+判重剪枝)
  6. POJ 1054 The Troublesome Frog(枚举 + 剪枝)
  7. JS 防止表单重复提交
  8. Android native进程间通信实例-binder篇之——解决实际问题inputreader内建类清楚缓存...
  9. 【vim环境配置】解决ubuntu上 由YouCompleteMe插件配置不当引起的 自动补全失效的问题
  10. 从零实现深度学习框架——逻辑回归中的数值稳定
  11. hutool实战(带你掌握里面的各种工具)目录
  12. ipv6文件服务器,在IPV6网络如何创建FTP服务器
  13. latex去心领域符号
  14. 计算机模拟技术在高分子领域的应用,模拟技术的原理、方法及在高分子材料研究中的应用...
  15. 用计算机算3次根号0.00005,使用ORCA在TDDFT下计算旋轨耦合矩阵元和绘制旋轨耦合校正的UV-Vis光谱...
  16. 云笔记Fusion Compute架构
  17. CentOS7 挂载NTFS分区
  18. Supervisor守护Java进程_使用Supervisor来守护我们的服务
  19. 计算机word图文混编实训报告,实训五 Word 图文混排
  20. JVM JDK JRE JSE的简单介绍

热门文章

  1. 基于SpringCloud开发rabbitmq五种工作模式实现
  2. macOS Monterey 12.3 官方原装引导版镜像高速下载
  3. mc服务器封禁查询系统,我的世界联机踢出和封禁熊的指令教程
  4. [继续八卦]微软CEO史蒂夫·鲍尔默学跳猴子舞
  5. django 进阶-- 模型
  6. PCA(主成分分析)方法数据降维、重构和人脸识别
  7. UML之6种关系的解释与画法
  8. 51单片机DS1302时钟LCD1602显示(可以按键设置时钟)
  9. ssm+vue+elementUI基于微信小程序的电动电动汽车车智能充电桩服务平台-计算机毕业设计
  10. SIGCOMM 历年最佳论文汇总Topic推荐-AMiner