蓝桥杯真题:杨辉三角形
具体分析可以看:
第十二届蓝桥杯B组省赛杨辉三角形题解_Nervous_46216553的博客-CSDN博客
输入输出样例
示例 1
输入
6
输出
13
评测用例规模与约定
对于 20%的评测用例,1≤N≤10; 对于所有评测用例,1≤N≤1000000000。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
第一眼的思路是打表算呢,打算从组合数一个一个算来着这样的时间复杂度挺高的。
第二种思路是找路径:用C(m,n)的组合数来看,当前位置比N大则向左走,小则向下走一次,向中间走一次:
#include<iostream>
using namespace std;
long long m;//行-1
long long n;//列-1
long long v;//C(m,n)的值
long long temp;//临时变量用来提速
void down(){//下一层v=v*(m+1)/(m-n+1);++m;
}
void left(){//左一个v=v*n/(m-n+1);--n;
}
void center(){//尝试往中间靠temp=v*(m-n)/(n+1);//如果右边更大就向右,否则不用动if(v<temp){v=temp;++n;}
}
int main(){long long N,ans=0;cin >> N;v=1;m=1;n=0;while(1){//查找if(v<N){down();center();}else if(v>N){left();}else{break;}}//检查位置正确性//cout << m+1 << " " << n+1 << endl;ans=m*(m+1)/2+n+1;//前面的等差数列求和然后加当前行if(ans==2)ans=1;cout << ans << endl;return 0;
}
第三种思路是二分:
利用列的递增性质我们进行二分:
#include<iostream>
using namespace std;
long long N;
long long P(long long m,long long n){//计算m行n列的值--m;//P(m,m)=C(m-1,n-1)--n;n=max(n,m-n);//C(m,n)==C(m,m-n)long long ans=1;for(long long i=1;i<=(m-n);++i){ans*=(n+i);ans/=i;//由上文定理一定能除尽if(ans>N){//及时退出防止溢出(只用大小关系,不需要准确值)return N+1;}}return ans;
}
long long find(long long n){//二分查找第n列long long gap=1<<30,m=n;//不存在m不小于n的位置!!!while(gap){if(P(m,n)<N){//小了往前跑m+=gap;}else if(P(m,n)>N){//大了间距缩小往前找gap/=2;//(8,4,2,1一定能凑出<=15的所有数(就是二进制表示吗))m-=gap;}else{return (m)*(m-1)/2+n;//前面的行等差数列求和然后加当前行}}return (N+1)*(N+1);//找不到就返会一个一定超了的位置,别的如果找到一定排的靠前。
}
int main(){long long ans=1;cin >> N;if(N!=1)//因为第一列全是1,值相等所以不可以用二分查找ans=find(2);for(int i=3;i<=100;++i){//第N行总和2^n(每行的总和都是上一行的两倍),最大值肯定>(2^n)/n,左侧100列以内绝对足够搜出10^9的数值(因为前文组合数计算优化过了,根本不怕溢出,查几列随便二分查找的速度很快很快)ans=min(ans,find(i));//找最小的}cout << ans << endl;return 0;
}
蓝桥杯真题:杨辉三角形相关推荐
- 第八届蓝桥杯真题解析javaC组
第八届蓝桥杯真题解析javaC组 文章目录 ***第八届蓝桥杯真题解析javaC组*** 前言 A.外星日历 B.兴趣小组 C.纸牌三角形 D.承压计算 E.杨辉三角 F.最大公共子串 G.Excel ...
- python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。
python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...
- 第五届蓝桥杯真题解析【JavaC组】
第五届蓝桥杯真题解析[JavaC组] 业精于勤,荒于嬉:行成于思,毁于随.--韩愈 文章目录 ***第五届蓝桥杯真题解析[JavaC组]*** 前言 A:猜年龄 B:等额本金 C:猜字母 D:大衍数列 ...
- 【蓝桥杯真题】16天冲刺 Python
距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和 ...
- 蓝桥杯真题:三羊献瑞
蓝桥杯真题:三羊献瑞 观查下面的加法算式: 其中相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 分析 ...
- # 2014年蓝桥杯真题CC++B组
2014年蓝桥杯真题C/C++B组 1.啤酒和饮料 题目描述 啤酒每罐2.3元,饮料每罐1.9元,小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道她买的啤酒比饮料的数量多,请你计算他买了几罐啤 ...
- 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和
注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...
- 第十届蓝桥杯c语言试题,第十届蓝桥杯真题编程题1-7解析(高级组).pdf
scratch 少儿编程第十届蓝桥杯真题 7 大家好 ~今天我们来讲解 scratch 蓝桥杯第十届编程大题的第七道题. 同样,这道题也是非常有难度的一道题.一起来看一下吧 解析: 女孩的程序 1.在 ...
- 第九届蓝桥杯真题解析JavaC组
第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...
- 蓝桥杯真题2017-2021
刷完近几年真题,感觉理解完之后,拿奖问题不大,本人这次获得2022年蓝桥杯javaB组省一,以下是历年javaB组省赛题目. 文章目录 2017年真题 一.购物单 二.纸牌三角形 三.承压计算 四.魔 ...
最新文章
- Wizard 开源文档管理系统1.0发布啦
- Tensorflow加载多个模型
- 逆势而上的技术:图神经网络学习来了!
- 备战秋招 |《百面机器学习》算法+leetcode开班报名!
- 织梦DedeCMS实现 三级栏目_二级栏目_一级栏目_网站名称 的效果代码
- 推特惊爆史诗级漏洞,App 恶意窃取用户隐私,云端安全路向何方?
- byteofpython中文gitbook_GitBook 简明教程
- D. Magic Gems(矩阵快速幂 || 无敌杜教)
- julia集 matlab代码,Julia中文手册1.1版本
- html 仿微信语音输入,AudioRecord仿微信录制语音
- UE4第三人称多人联机游戏开发02
- 分割符(split)
- 2022高处安装、维护、拆除考试题库及模拟考试
- Apifox实战——微信的第三方小程序提审发布
- 漫谈程序员系列:你的幸运女神呢
- 【AMD、CMD和CommonJS】
- 解决小米远程管理下电脑出现ftp文件错误提示
- 网络舆情监测与分析研判工作如何高效做好的解决方案
- MySQL高可用方案之PXC架构
- Ambari 集成LDAP技术方案
热门文章
- qq象棋辅助 android,QQ象棋自动下棋
- JSON.Stringify
- webstorm激活破解方法大全
- 在使用JEDate时间控件时,不能捕捉到input的change事件的解决办法
- Flash Builder4.7 破解方法
- 离线网页制作器(beta1.0)
- 【NFC】 NfcA/NfcB/NfcF/NfcV/IsoDep/Ndef/Mifare/Felica/Pboc/ISOxxxx 都是些什么鸟玩意?
- win10+vs2015破解VA_X
- dosbox使用教程
- 汇编软件DOSBox使用教程