第十二届蓝桥杯省赛部分题解(B组)

试题A:空间

在这里插入图片描述
解析
(一)
1B = 8 bit
1KB = 1024B
1MB = 1024KB
所以256MB占据256102410248个bit,一个元素占32bit,所以一共有
256
102410248/32 = 67108864

(二)
32位二进制为4字节相当于一个int,所以一共有
25610241024/4 = 67108864

试题B:卡片

哈哈哈

解析
思维题,注意输出时减一

题解

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int s[11];

bool check(int x){
	while(x){
		int t=x%10;
		x/=10;
		s[t]--;
		if(s[t]<0) return false;
	}
	return true;
}

int main(){
	for(int i=0;i<10;i++){
		s[i]=2021;
	}
	for(int i=1;;i++){
		if(!check(i)){
			cout<<i-1<<endl;
			return 0;
		}
	}
	return 0;
} 

3181

试题C:直线

在这里插入图片描述

解析

枚举出所有两两点构成的直线,再根据y = k * x + b 判断直线是否唯一
注意:1,k与x为浮点数计算,其比较时相差在1e-8间都默认相等
2,注意k不存在的情况,最后要将其补上

题解

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;

const int N = 2e5;
int n;

struct Line{
	double k,b;
	//结构体内镶排序,远快于cmp外部排序 
	bool operator< (const Line& t) const{
		if(k != t.k) return k < t.k;
		else return b < t.b;
	}
}l[N];

int main(){
	for(int x1 = 0;x1 < 20;x1 ++)
		for(int y1 = 0;y1 < 21;y1 ++)
			for(int x2 = 0;x2 <20;x2 ++)
				for(int y2 = 0;y2 < 21;y2 ++){
					//注意x1 != x2为K存在时 
					if(x1 != x2){
						double k = (double)(y2 - y1) / (x2 - x1);
						double b = y1 -k * x1;
						l[n ++] = {k, b};
					}
				}
	sort(l, l + n);
	int res = 1;
	for(int i = 1;i < n;i ++){
		//注意计算机计算浮点数会有误差,所以一般相差在1e-8之间认为两个浮点数相同 
		if(fabs(l[i].k - l[i-1].k) > 1e-8 || fabs(l[i].b - l[i - 1].b) > 1e-8)
			res ++;
	}
	cout << res + 20 << endl;
	return 0;
}

40257

试题D: 货物摆放

在这里插入图片描述

解析
吐槽一下,相对简单的一题,然而菜鸡却还是没有写出来

题解

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;
typedef long long ll;
const ll N = 2021041820210418;

vector<ll> g(ll N){
	//基础基础基础!!重要的事情说三遍 
	vector<ll> res;
	for(ll i = 1;i <= N/i;i ++){
		if(N % i == 0){
			res.push_back(i);
			if(i != N / i) res.push_back(N / i);
		}
	}
	//可有可无 
	sort(res.begin(), res.end());
	return res;
}



int main(){
	auto res = g(N);
	ll l = res.size();
	int ans;
	for(int i = 0;i < l;i ++){
		for(int j = 0;j < l;j ++){
			for(int k = 0;k < l;k ++){
				if(res[i]*res[j]*res[k] == N)
					ans++;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

2430

总结
第一次蓝桥杯,犯了很多低级错误,总的来说还是基础不牢,代码打的不够多,继续加油!!

### 关于第十一届蓝桥杯 Python B题解析 目前提供的引用内容并未直接提及第十一届蓝桥杯 Python B的具体题目或解析[^1]。然而,可以推测该事的真题通常涉及算法设计、数据结构应用以及编程技巧等方面的知识。 以下是基于过往蓝桥杯的特点和常见考点所整理的内容: #### 常见考题类型 1. **基础算法** 蓝桥杯常考察一些经典的算法实现,例如排序算法(快速排序、归并排序)、查找算法(二分查找、深度优先搜索 DFS 和广度优先搜索 BFS)等。 2. **字符串处理** 字符串的操作是竞中的高频考点之一,可能涉及到子串匹配、正则表达式或者字符替换等问题。例如: ```python s = "hello world" result = ''.join([char.upper() if i % 2 == 0 else char.lower() for i, char in enumerate(s)]) print(result) # 输出 hElLo wOrLd ``` 3. **动态规划** 动态规划问题在比中也较为常见,尤其是关于最优化路径的选择或者是资源分配的问题。这类问题的核心在于状态转移方程的设计。 4. **模拟与枚举** 部分题目可以通过暴力枚举的方式解决,尤其是在输入规模较小的情况下。需要注意的是,在编写此类程序时要充分考虑边界条件。 5. **数论基础知识** 数学方面的知识点也可能被纳入考试范围之内,比如最大公约数 GCD 的计算方法——辗转相除法: ```python def gcd(a, b): while b != 0: a, b = b, a % b return a print(gcd(48, 18)) # 输出 6 ``` 由于具体年份的真实试题尚未提供明确链接支持进一步分析[^2],建议查阅官方发布的历届题文档或其他权威资料获取更详尽的信息。 #### 如何准备? 为了更好地应对类似的编程竞,可以从以下几个方面着手准备: - 多做历年真题,熟悉各类题型; - 学习经典算法及其变种形式的应用场景; - 提升代码调试能力,确保提交前测试无误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值