首页 > 其他分享 >[蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)

[蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)

时间:2024-04-06 22:30:10浏览次数:22  
标签:return cout int 蓝桥 查找 2021 ans 杨辉三角

        我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二分查找答案即可

上代码

#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long

using namespace std;

int n;

int C(int a, int b)//C(a,b)表示Cab,a>b。
{
	if(a < b) return 0;
	if(b * 2 > a) b = a - b;//如果b大于a的一半,就将a - b作为b的新值
	int ans = 1;
	for(int i = 0; i < b; i++){
		ans = ans * (a - i) / (i + 1);
		if(ans >= n) return ans;
	} 
	return ans;
} 

signed main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> n;//输入要查找的数
	if(n == 1){
		cout << 1 << endl;
		return 0;
	}
	//cout << C(30, 20) << endl;
	
	int ans_x = 1e9, ans_y = 1e9;//寻找出现的最小位置,就要先初始化为最大值 
	for(int i = 0; i < 30; i++){//枚举列 
		int l = 2, r = 1e9;//在第二列中为公差为1的等差数列,在1e9行内一定有答案
		
		while(l < r){
			int mid = (r + l) / 2;
			if(C(mid, i) >= n) r = mid;
			else l = mid + 1; 
		}
		
		if(C(l, i) == n){
			if(ans_x > l){
				ans_x = l;
				ans_y = i;
			} 
		}
	} 
	
	cout << ans_x * (ans_x + 1) / 2 + ans_y + 1 << endl;//求出当前答案所在位置,先高斯求和到ans_x再加上当前列数ans_y + 1 
	
	return 0;
}

标签:return,cout,int,蓝桥,查找,2021,ans,杨辉三角
From: https://blog.csdn.net/2302_81473103/article/details/137372365

相关文章

  • [蓝桥杯 2022 省 B] 李白打酒加强版(三维动态规划)
        通过题目描述,我们可以知道这道题目涉及到某种状态时候的方案数,因此我们可以用动态规划来解决问题,并且我们需要注意到酒的状态,因此我们可以用三维数组来存储状态,我们知道N,M最大不会超过100,并且如果酒超过了100斗,即使遇到100朵花也无法喝完,因此只需要定义大小都为1......
  • 蓝桥杯 试题 算法训练 拿金币
    问题描述有一个NxN的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。输入格式第一行输入一个正整数n。以下n行描述该方格。金币数保......
  • UOJ #710. 【北大集训2021】魔塔 OL
    Description[北大集训2021]魔塔OL题目背景CTT2021D1T2题目描述比特游戏公司最近发布了一款新游戏《魔塔Online》,玩家可以操控勇士在游戏世界中与怪物进行搏斗。在游戏发布之初,魔塔里没有任何怪物,接下来将依次发生\(q\)个事件,每个事件是以下三种之一:+xyzab:表示......
  • python蓝桥题库2141-山
    见题目我最近买了他们官方的程序设计竞赛的书,一本紫色的,在引子部分这部分出现了这道题,最开始看代码的时候没看懂,我现在来逐层分析,你需要有一定基础来看这篇文章,还要就是我的见解偶数情况第一行先设置了个ans的计数变量接下来range循环20-20223(不对啊?这和题目要求的循环......
  • AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    D-aabababaa根据题意从左往右进行分析如果当前该字母为a那么存在两种情况一种为b的数量为0一种为剩余的k的数量小于右边所有情况的总和其总和对应为C(剩余的长度,b的个数)反之则为b点击查看代码intget(intx,inty){intans=1;for(inti=1;i<=y;i++){ans=(x-i......
  • 20211325高进涛加密API研究
    密码引擎-加密API研究 Content任务详情0.研究学习原始文档CryptoAPIPKCS#11GM/T0016-2012智能密码钥匙密码应用接口规范GM/T0018-2012密码设备应用接口规范1.总结这些API在编程中的使用方式CryptoAPIPKCS#11SKF2.列出这些API包含的函数,进行分类,并总结它......
  • 蓝桥杯2023年A组-试题B-有奖问答
    0.题目小蓝正在参与一个现场问答的节目。活动中一共有30道题目,每题只有答对和答错两种情况,每答对一题得10分,答错一题分数归零。小蓝可以在任意时刻结束答题并获得目前分数对应的奖项,之后不能再答任何题目。最高奖项需要100分,所以到达100分时小蓝会直接停止答题。已知......
  • 第二十五周代码(蓝桥杯查缺补漏)
    2024/03/31    周日填充题目链接【参考代码】想用暴力,没过//枚举,未出结果QAQ#include <bits/stdc++.h>using namespace std;string s00 = "00";string s11 = "11";int ans = 0;//m个问号,子串有2^m种,使用dfs//初步思路:分割子串,直到只有两......
  • 【2021.6.26 NOI模拟】Problem B. 简单题 another solution
    ProblemDescriptionInput从文件b.in中读入数据。一个正整数n。Output输出到文件b.out中。一个整数表示答案。SampleDataInput#1Copy5Output#1Copy31Input#2Copy50Output#2Copy2885DataConstraint首先,我们从小到大枚举\(n\),假设当前枚举......
  • 蓝桥杯2023年A组-试题A-幸运数
    0.题目1.题解1.1暴力枚举思路这是一个填空题,所以可以直接暴力枚举注意:1.要是想要求位数:使用log10(abs(num))+12.%求余两边都必须是整数,pow(10,halfDigits);的返回值是double,这里必须转换代码#include<iostream>#include<cmath>boolisLuckyNumber(intn......