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

参考:

2021第十二届蓝桥杯省赛AB组C++组 杨辉三角形_skgion的博客-CSDN博客

二分法的边界问题详细分析_Lin_RD的博客-CSDN博客_二分法如何确定边界

这道题思路:

1.杨辉三角形——>组合数——>组合数的解法;

2.找规律——>可以把杨辉三角形对半分,斜着看,从左往右数第x条斜着的上的数是mCx,m是从2*x开始的数(如下方举例)——>每条边都单调递增,找数字通过二分找;

例如:

从2开始的那条斜边:2-3-4-5-6-……即为2C1,3C1,4C1,5C1,6C1……

从6开始的那条斜边:6-10-15-21-……即为4C2,5C2,6C2,7C2……

从20开始的那条斜边:20-35-56……即为6C3,7C3,8C3……

解题时:

1.按计算器发现:30C15=155117520>1E9,28C14=4011660,所以可以从 左数第14条边 向 第一条边找(srds 解题网站上从第8条边开始找也能过)

2.组合数的计算:用数学公式直接算

    long long ans=1;//直接算组合数,q是下面的,x是上面的,ans是结果for(int i=1,j=q-x+1;i<=x;i++,j++)ans=ans*j/i;

因为这样算组合数,ans是递增,所以当ans大于要找的数n时,直接返回ans(这个时候ans虽然不是组合数的答案,但也是比n大的)

(一开始用数组算组合数c[i][j]=c[i-1][j]+c[i-1][j-1];,结果时间还没炸,空间先炸了orz)

3.二分法:

设x是要找的那条边的序号。L=2*x,因为所有的边开始的第一个数字都是(2*x)Cx,R=n,因为最坏的结果是nC1。二分要查找的区间是[l,r]闭区间(具体的可以看参考网址中的二分法),同时一条边上的数(除了第0条边)都是严格单调递增(每个数都不一样),所以mid找到了就可以输出了。

4.如何确定n是第几个数:设n=qCx,然后找规律:

6=4C2,在第13个数-->(1+2+3+4)+2+1

10=5C2,在第18个数-->(1+2+3+4+5)+2+1

7=7C1,在第30个数-->(1+2+3+4+5+6+7)+1+1

……

所以,n=qCx,数的位置:(1+2+3+……+q)+x+1=(q+1)*q/2+x+1;

#include<bits/stdc++.h>
using namespace std;
long long n;
long long C(long long q,long long x)
{long long ans=1;for(int i=1,j=q-x+1;i<=x;i++,j++){ans=ans*j/i;if(ans>n)return ans;}return ans;
}
bool check(long long x)
{long long l=2*x,r=n,q;//mid要在l和r闭区间里面!while(l<=r){long long mid=l+(r-l)/2;q=C(mid,x);if(q>n){r=mid-1;}else if(q<n){l=mid+1;}else {cout<<(mid+1)*mid/2+x+1<<endl;//这里一定要/2,不然卡在45qwqreturn 1;}}return 0;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cin>>n;for(int i=14;i>=0;i--){if(check(i))break;}return 0;
}

蓝桥杯2021年第十二届省赛-杨辉三角形相关推荐

  1. C++ | 蓝桥杯2021年第十二届卡片问题(源代码:C语言/C++/Python)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  2. 【蓝桥杯嵌入式】第十二届蓝桥杯嵌入式省赛程序设计试题以及详细题解

    原题展示     通读本试题后,可以知本试题所涉及到的模块有LCD显示.LED指示.按键切换.串口收发.定时器的PWM输出五个部分,试题的总体变化不大.在试题要求的所有功能中,串口这部分是侧重点,它既 ...

  3. 第十二届蓝桥杯2021年C++A组省赛题解

    文章目录 注 考生须知 试题A:卡片 试题B:直线 题解 代码(set + map) 试题C:货物摆放 题解 代码 试题D:路径 题解 代码 试题E:回路计数 题解 代码 试题F:砝码称重 题解 代码 ...

  4. 【蓝桥杯嵌入式】第十二届蓝桥杯嵌入式省赛客观题及详细题解

    题1 解析: 波特率,指每秒钟传输码元符号的个数,对符号传输速率的一种度量,单位为1baud/s. 由于串口只有高低电平之分,即1码元等于1bit,即波特单位1baud和1bit等效,因此,此时的波特 ...

  5. [蓝桥杯]2019年第十届省赛真题C/C++ B组 填空+大题

    第十届蓝桥杯省赛题目 填空A:组队 填空B:年号字串 填空C:数列求值 填空 D: 数的分解 填空 E: 迷宫 大题F:特别数的和 大题G:完全二叉树的权值 大题H:等差数列 大题I-后缀表达式 填空 ...

  6. 题目 2311: 蓝桥杯2019年第十届省赛真题-Fibonacci 数列与黄金分割

    题目 Fibonacci 数列是非常著名的数列: F[1] = 1,F[2] = 1, 对于 i > 3,F[i] = F[i − 1] + F[i − 2] Fibonacci 数列有一个特殊 ...

  7. 【STM32G4】备战蓝桥杯嵌入式---实战---第十二届嵌入式模拟赛

    文章目录 前言 一.题目 功能简述 二.模块初始化以及功能分析 1.模块的初始化 2.模块功能分析 三.函数实现 1.void Display(void); 2.uint8_t KEY_Scan(ui ...

  8. 蓝桥杯2019年第十届国赛真题-大胖子走迷宫

    题目 题目链接 题解 BFS. 整体思路:将位置信息和时刻信息放入队列,根据时刻信息判断当前时刻小明的大小,如果大小为1×11×11×1则不能原地停留,因为没意义啊,停留是为了让自己的肚子减小,但是1 ...

  9. 蓝桥杯2021届C++B组省赛真题 杨辉三角形

    分析: 1. 首先他要我们找第一次出现N的位置,我们可以发现杨辉三角是两边完全对称的,在右边出现的在左边一定先出现过,所以N只可能出现在左半边,我们将右半边删去 2. 这道题的数据规模特别大,那么我们 ...

最新文章

  1. JavaMelody+Spring+struts2配置详解——系统监控
  2. python软件是免费的吗-谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信...
  3. POJ 3034 Whac-a-Mole(DP)
  4. 中fuse_一个Fanotify和FUSE配合使用导致的问题
  5. Android studio 运行即打包keystore之build.gradle设置
  6. 6大设计原则之单一职责原则
  7. android表白app
  8. Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理
  9. python3下的IE自动化模块PAMIE
  10. 【2019.09.14】2019icpc沈阳网络赛
  11. 《Python爬虫开发与项目实战》——第1章 回顾Python编程 1.1 安装Python
  12. svnadmin dump导入导出命令
  13. 2019年上海交通大学816自动控制理论考研经验分享
  14. 打印学生选课清单(25分) c++实现
  15. Mybatis整合达梦数据库
  16. 谈谈百度搜索解封经验与技巧(转)
  17. Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
  18. 剑指offer-20200226
  19. 项目风险常见清单列表库
  20. 【蓝桥杯真题】成绩统计

热门文章

  1. Matlab实现图像压缩
  2. thingsboard使用教程
  3. 智哪儿现场:凯迪仕建博会发布新品“千里眼”智能锁K20 Pro Max,行业新标杆
  4. LWN:利用 __GFP_UNMAPPED 减少direct-map 碎片化!
  5. PIE-engine 教程 ——坡度、坡向、山阴、粗糙度计算和显示案例分析
  6. ios实现qq空间飘落的花瓣(swift—粒子发射器)
  7. 微信拍一拍功能上线,网友表示:别扒拉我!
  8. 全国计算机等级考试二级教程c语言程序设计考试大纲,全国计算机等级考试二级C语言程序设计考试大纲.docx...
  9. 利用shift连点五次进入电脑
  10. 由DIY想到的面向对象思想