第十二届蓝桥杯真题做题笔记

2、卡片

笔记:

直接巧用排列组合求解即可:

我们通过对样例说明进行分析可知:想要分给n个小孩,那么我们就需要满足C(K, 2) + K >= n才能满足。

#include<bits/stdc++.h>
using namespace std;

int com(int up, int down){
	if(up > down)	return 0;
	if(up == down)	return 0;
	int res = 1;
	for(int i = 1; i <= up; i++){
		res = res * (down - i + 1) / i;
	}
	return res;
}

int main(){
	int n;
	cin >> n;
	int down = 2;
	while(com(2, down) + down < n){
		down++;
	} 
	cout << down << endl;
	return 0;
}

4、货物摆放:

题目:

小蓝有一个超大的仓库,可以摆放很多货物。

现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。

小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 L、W、H 的货物,满足 n = L×W×H。

给定 n,请问有多少种堆放货物的方案满足要求。

例如,当 n = 4 时,有以下 6种方案:1×1×4、1×2×2、1×4×1、2×1×2、2 × 2 × 1、4 × 1 × 1

请问,当 n = 2021041820210418(注意有 16 位数字)时,总共有多少种方案?
 

笔记:

这道题三重暴力循环会超时,因为n太大了,所以我们需要将预处理数据的大小压缩一下,因为n = l * h * w,所以我们可以只求l,h,w的组合,为了不在从0开始一个一个得去找找三个符合的数,我们可以直接去获取n的所有因子的数列,再从这个数列中去找到符合的l,h,w的值。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
vector<ll> res(1e7, 0);
ll n = 2021041820210418;
int main(){
	ll index = 0;
	for(ll i = 1; i <= sqrt(n); i++){
		if(n % i == 0){
			res[index++] = i;
			if(i * i != n){
				res[index++] = n / i;
			}
		}
	}
	res.resize(index + 1);
	ll count = 0;
	for(ll l = 0; l < res.size(); l++){
		for(ll h = 0; h < res.size(); h++){
			for(ll w = 0; w < res.size(); w++){
				if(res[l] * res[h] * res[w] == n){
					count++;
				}
			}
		}
	}
	cout << count;
	
	
	return 0;
}

3、直线

题目:

在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。

给定平面上 2 × 3 个整点(�,�)∣0≤�<2,0≤�<3,�∈�,�∈�(x,y)∣0≤x<2,0≤y<3,x∈Z,y∈Z​,即横坐标 是 00 到 11 (包含 0 和 1) 之间的整数、纵坐标是 0 到 2 (包含 0 和 2) 之间的整数 的点。这些点一共确定了 11 条不同的直线。

给定平面上 20×2120×21 个整点 (�,�)∣0≤�<20,0≤�<21,�∈�,�∈�(x,y)∣0≤x<20,0≤y<21,x∈Z,y∈Z,即横 坐标是 00 到 1919 (包含 00 和 1919) 之间的整数、纵坐标是 00 到 2020 (包含 00 和 2020​) 之 间的整数的点。

请问这些点一共确定了多少条不同的直线。

笔记:

这道题我们就遵循一个原则:两点确定一条直线,我们只需要找到斜率是独一无二的直线即可,有公式y = k*x + b我们可以获取两点连成直线的斜率以及b,接着就暴力搜索出符合的(k, b),这里我们需要注意的是要对这些组合进行去重,我们可以使用set容器来去重,最后我们还需要注意:还存在斜率不存在的直线也就是平行于x轴的直线,最后就是将set容器的大小再加上这些平行于x轴的直线的数组即可。

#include<bits/stdc++.h>
using namespace std;

set<pair<double, double> > st;
int main(){
	for(int x1 = 0; x1 < 21; x1++){
		for(int y1 = 0; y1 < 20; y1++){
			for(int x2 = x1 + 1; x2 < 21; x2++){
				for(int y2 = 0; y2 < 20; y2++){
					double k = (double)(y1 - y2) / (x1 - x2);
					double b = (double)(x1 * y2 - x2 * y1) / (x1 - x2);
					st.insert(make_pair(k, b));
				}
			}
		}
	}
	cout << st.size() + 21;
	return 0;
}

7、砝码称重:

题目:

你有一架天平和 �N 个砝码,这 �N 个砝码重量依次是 �1,�2,⋅⋅⋅,��W1​,W2​,⋅⋅⋅,WN​。

请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。

输入格式

输入的第一行包含一个整数 �N。

第二行包含 �N 个整数:�1,�2,�3,⋅⋅⋅,��W1​,W2​,W3​,⋅⋅⋅,WN​。

输出格式

输出一个整数代表答案。

样例输入

3
1 4 6

样例输出

10

样例说明

能称出的 1010 种重量是:1、2、3、4、5、6、7、9、10、111、2、3、4、5、6、7、9、10、11​。

1=1;1=1;

2=6−4(2=6−4(天平一边放 66,另一边放 4);4);​

3=4−1;3=4−1;

4=4;4=4;

5=6−1;5=6−1;​

6=6;6=6;

7=1+6;7=1+6;

9=4+6−1;9=4+6−1;

10=4+6;10=4+6;

11=1+4+6。11=1+4+6。

笔记:

这道题可以采用bfs的思想与背包思想相结合:

我们在这里将dp数组设为:前i个元素能否凑成j的bool值,将dp[0][0]初始化为0,接着然后我们遍历dp数组,如果dp[i - 1][j] = true呢么i个元素也一定可以凑成j,所以dp[i][j] = true,然后开始扩散:dp[i][j + nums[i]] = true,dp[i][j - nums[i]] = true,dp[i][nums[i] - j] = true;

扩散完一遍,我们就可以对数组进行检查,如果dp[i][j] = true那么就count ++。

有几点需要注意的是:

(1)这里我们在输入nums数组的时候不可以从0开始加入元素,因为为了符合后续dp数组的遍历:i表示前i个元素,所以我们的nums数组要从1开始。

(2)在dp数组中进行遍历搜索的时候我们无需提前判断当前dp[i][j]是否为false,因为我们是符合了bfs一层一层向外扩散,所以我们不单单是对fasle的dp元素进行判断处理,对true的dp元素也一样要判断处理。

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin >> n;
	vector<int> nums(n + 1, 0);
	int sum = 0;
	int count = 0;
	for(int i = 1; i <= n; i++){
		cin >> nums[i];
		sum += nums[i];
	}
	vector<vector<bool> > dp(n + 1, vector<bool>(sum + 1, false));
	dp[0][0] = true;// 前i中元素是否能够凑成j 
	for(int i = 1; i <= n; i++){
		for(int j = 0; j <= sum; j++){
			if(dp[i][j] == false){
				if(dp[i - 1][j] == true){
					dp[i][j] = true;
					dp[i][j + nums[i]] = true; // 会略过nums[0]的情况。 
					if(j > nums[i]){
						dp[i][j - nums[i]] = true;
					}else{
						dp[i][nums[i] - j] = true;
					}
				}
			}
		}
	}
	for(int j = 1; j <= sum; j++){
		if(dp[n][j])	count++;
	}
	cout << count;
	
	return 0;
}

10、括号序列:

题目:

笔记:

(1)首先明确dp数组含义:

dp[ i ][ j ]:表示第i个右括号前添加j个左括号的组合数。

(2)状态转移方程:

dp[ i ][ j ] = dp[ i - 1 ][ 0 ] + ......... + dp[ i - 1 ][ j ]:

也就是i-1号有括号前加0个左括号,i - 1号右括号到i好有括号之间加j个左括号 到i - 1号有括号前加j个左括号, i- 1号右括号到i号右括号之间加0个左括号。

通过对上面状态转移方程的进一步分析我们就可以发现并不能从0开始遍历,我们的i的遍历范围是从第一个到第n个,那我们j的遍历范围就应该是从(i  - suml(前面剩余的左括号的数量) -----  j)也就是目的是让前面的合法。

(3)初始化:

按照我们定义的含义来分析:首先看第一个右括号前面我们如没有剩余的左括号,那么添加1 - j的左括号的方案数都为1,若果有剩余左括号那么前面添加0个左括号的方案数为1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/543293.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ERROR 1052 (23000): Column ‘deptno‘ in field list is ambiguous

错误原因&#xff1a; 这个错误通常是在多表查询中&#xff0c;因为你的SQL查询中包含了多个表&#xff0c;并且这些表中都有一个名为deptno的列。这会导致数据库无法确定你要引用哪个表中的 deptno列&#xff0c;从而产生歧义。 解决方法&#xff1a; 为了解决这个问…

实验:基于Red Hat Enterprise Linux系统建立RAID磁盘阵列

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 什么是磁盘阵列&#xff08;RAID&#xff09; 1. 为虚拟机添加4块大小为20G的硬盘nvme0n【2-5】&#xff0c;将nvme0n【2、3、4】三块硬盘 建立为raid5并永久挂载&#xff0c;将RAID盘全部空间制作逻辑卷&#…

又是大佬开源的一款自动预约i茅台的系统

又是大佬开源的一款自动预约i茅台APP的系统 话不多说直接上系统 Campus-imaotai,i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署.现在github上已有1.6kstar,就不谈有多少用户现在真正在使用这个系统了,操作方便,配置简单即可快速上手 github地址:ht…

【bugku】变量1

1.打开靶场&#xff0c;进入主机 2.根据源码发出get请求&#xff0c;GLOBALS这种全局变量用于在 PHP 脚本中的任意位置访问全局变量 3.得到flag值

城市预约挂号统一平台的实现

目录 一、需求分析 二、界面设计 ​ 三、前端开发 四、代码下载 一.需求分析 二、界面设计 三、前端开发 <!DOCTYPE html> <html lang"zh-ch"> <head><meta charset"UTF-8"><title>基本样式页</title><link rel…

opc ua 环境构建(记录一)

1、准备 Siemens Simatic WinCC v7.5 二、配置 SIMATIC NET与S7-200 SMART 集成以太网口OPC 通信(TIA平台) 硬件: ①S7-200 SMART ②PC 机 ( 集成以太网卡) 软件: ① STEP 7-Micro/WIN SMART V2.1 ② STEP 7 Professional(TIA Portal V13 SP1 Upd 9) ③ SIMATIC NET …

Web 题记

[极客大挑战 2019]LoveSQL 看到这种就肯定先想到万能密码&#xff0c;试试&#xff0c;得到了用户名和密码 总结了一些万能密码&#xff1a; or 11 oror admin admin-- admin or 44-- admin or 11-- admin888 "or "a""a admin or 22# a having 11# a havin…

c++修炼之路之vector--标准库中的vector

目录 前言 一&#xff1a;vector的简介 二&#xff1a;vector的常用接口 1.构造函数 2.迭代器访问遍历数组 3.容量接口函数 4.增删查改接口函数 三&#xff1a;vector常用接口的全部代码 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗----------…

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc&#xff0c;这个mem_malloc的使用不会产生内存碎片&#xff0c;可以高效利用单片机ram空间。 源码仓库&#xff1a;GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小&#xff0c;而且没…

单调栈基础题

739. 每日温度 问题描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。…

模型融合1

一、模型融合:与集成算法一样,都是训练多个评估器,并将多个评估器以某种方式结合起来解决问题的机器学习办法。但是区别是模型融合能够再经典集成模型的基础上进一步提升分数,使用模型融合ji融合:与集成算法一样,都是训练多个评估器,并将多个评估器以某种方式结合起来解…

[SystemVerilog]常见设计模式/实践

常见设计模式/实践 RTL 设计&#xff08;尤其是 ASIC&#xff09;的最终目标是制作出最小、最快的电路。为此&#xff0c;我们需要了解综合工具如何分析和优化设计。此外&#xff0c;我们还关注仿真速度&#xff0c;因为等待测试运行实际上是在浪费工程精力。虽然综合和仿真工…

java项目实战之图书管理系统(1)

✅作者简介&#xff1a;大家好&#xff0c;我是再无B&#xff5e;U&#xff5e;G&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1.背景 图书管理系统是一种用于管理图书…

STC89C52学习笔记(十二)

STC89C52学习笔记&#xff08;十二&#xff09; 一、AD/DA 1.定义 AD能够将模拟信号转化为数字信号&#xff0c;DA能够将数字信号转化为模拟信号。 2.两种类型的DA转换器 &#xff08;1&#xff09;PWM型DA滤波器 由于PWM是通过脉冲调制的方法来调整的&#xff0c;低通滤…

【机器学习】数学基础详解

线性代数&#xff1a;构建数据的骨架 数学对象 标量&#xff08;Scalar&#xff09; 标量是最基本的数学对象&#xff0c;代表了单个的数值&#xff0c;无论是整数还是实数。在机器学习中&#xff0c;标量可以用来表示一个模型的单个参数&#xff0c;如偏差&#xff08;bias&…

学习大数据,所需要的java(Maven)基础(2)

文章目录 Maven核心概念统一管理目标jar包的版本仓库生命周期插件和目标 继承为什么需要继承机制创建父工程在子工程中引用父工程在子工程中引用父工程在父工程中管理依赖 聚合为什么要使用聚合如何配置聚合 Maven酷站Maven生产环境所遇到的问题jar未下载完成jar包冲突问题 Mav…

ActiveMQ入门案例(queue模式和topic模式)

目录 前言&#xff1a;为什么使用消息中间件&#xff1f; 异步通信 缓冲 解耦 前提&#xff1a;安装并启动activemq 一、点对点&#xff08;point to point&#xff0c; queue&#xff09; 1.1 创建maven项目 1.2 Pom依赖 1.2 JmsProduce 消息生产者 1.3 JmsConsumer…

伺服驱动器算法入门的一些建议和书籍推荐

希望此篇文章对想从事伺服驱动器的研发工作的一些刚刚入门的同学一些建议。 针对伺服驱动器的研发工作涉及的知识和需要掌握的技能主要分为两部分&#xff0c;第一是原理部分、第二是工程实践部分。原理部分的学习在此主要推荐大家查看一些入门书籍&#xff0c;本文章中也对书籍…

iOS------SDWebImage源码

一&#xff0c;简介 一个异步图片下载及缓存的库 特性&#xff1a; 一个扩展UIImageView分类的库&#xff0c;支持加载网络图片并缓存图片异步图片下载器异步图片缓存和自动图片有效期限管理支持GIF动态图片支持WebP背景图片减压保证同一个URL不会再次下载保证无效的URL不会…

Linux 目录结构与基础查看命令

介绍 目录结构如下 /bin&#xff1a;存放着用户最经常使用的二进制可执行命令&#xff0c;如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot&#xff1a;存放启动系统使用的一些核心文件&#xff0c;如引导加载器&#xff08;bootstrap loader…