2021第十二届蓝桥杯C++B组省赛 第一场个人题解(大部分)

这篇博客是作者对2021第十二届蓝桥杯C++B组省赛的部分试题的解答和分析,涵盖了数据结构、算法和图论等相关知识点。涉及的试题包括空间、卡片、直线、货物摆放等,每个题目都有详细的解题思路和答案。文章末尾作者分享了参赛感受,认为今年的题目难度和知识覆盖面有所增加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++省赛B组个人题解(部分

试题A:空间

题目
在这里插入图片描述

答案:67108864

分析
计算机组成原理题,一上来就栽跟头了。。。
1byte=8bits,Bit意为"位"或"比特",是计算机运算的基础;
Byte意为"字节",是计算机文件大小的基本计算单位;
8个二进制位构成1个"字节(Byte)",即1Byte=8bit
所以1个32位二进制数占4个Byte。
答案为
在这里插入图片描述

试题B:卡片

题目
在这里插入图片描述

答案:3181

分析
打卡题

#include <bits/stdc++.h>
using namespace std;
int a[10];
bool ok(int x)  //每个数消耗卡片
{
   
    while(x)
    {
   
        int temp = x % 10;
        if(a[temp])
        {
   
            a[temp]--;
            x /= 10;
        }
        else
            return 0;
    }
    return 1;
}
int main()
{
   
    fill(a, a + 10, 2021); //总共的卡片数
    for (int i = 1;; i++)
    {
   
        if(ok(i))
            continue;
        else
        {
   
            cout << i - 1;
            break;
        }
    }
    return 0;
}

试题C:直线

题目
在这里插入图片描述

答案:40257

分析
一看像个数学题,可是又推不出数学公式,然后就分三种情况讨论,哈希统计个数,测试样例和自己测试的小样例都过了,不过好像数据大了,double精度不够用,因此需要调用2个坐标,求b,才能得到正确解
1.平行于y轴 直线表达式为x=???
2.平行于x轴 直线表达式为y=???
3.普通一次函数 直线表达式为y=kx+b

#include <bits/stdc++.h>
using namespace std;
set<pair<double, double> > ss; //普通的直线
set<double> dx,dy; //两种特殊的直线
struct point
{
   
    double x, y;
};
void solve(point a,point b)
{
   
    if(a.x==b.x)    //平行于y轴
        dx.insert(a.x);
    else if(a.y==b.y)    //平行于x轴
        dy.insert(a.y);
    else    //计算表达式y=kx+bb
    {
   
        double k = (b.y - a.y) / (b.x - a.x);
        // double bb = a.y - k * a.x;   //错误解
        //正解 运用两个点的坐标提升精度
        double bb = (a.y * b.x - a.x * b.y) / (b.x - a.x); 
        ss.insert(pair<double, double>(k, bb));
    }
}
int main()
{
   
    
    vector<point> v;
    for (int i = 0; i <= 19;i++)
    {
   
        for (in
### 第十四届蓝桥杯 B C++ 题解及相关经验 #### 关于第十四届蓝桥杯 B题目解析 针对第十四届蓝桥杯 B C++题目解析,可以从以下几个方面入手。首先,在准备阶段,熟悉基础算法和简单的数据结构是非常重要的[^1]。例如,常见的排序算法(快速排序、归并排序)、搜索算法(深度优先搜索 DFS 和广度优先搜索 BFS),以及动态规划的基础概念都是必备的知识点。 以下是部分可能涉及的经典题型及其解决思路: 1. **字符串处理** 字符串操作是编程比中非常常见的一类问题。可以参考 `to_string()` 函数的应用场景来理解如何将不同类型的数据转换为字符串形式[^3]。例如: ```cpp #include <iostream> #include <string> using namespace std; int main() { string str = to_string(123); cout << "Integer to String: " << str << endl; double d = 12.3456789; str = to_string(d); cout << "Double to String (with precision): " << str.substr(0, 8) << endl; char ch = 'A'; str = to_string((int)ch); // 将字符转为其 ASCII 值对应的字符串 cout << "Char to Int/String: " << str << endl; return 0; } ``` 2. **数与双指针技巧** 双指针是一种高效的解决问题方法,尤其适用于两数之和或者寻找子序列等问题。需要注意的是,在实现过程中应避免直接修改原数内容,而应该通过其他变量记录状态变化[^4]。下面是一个经典的例子: ```cpp #include <vector> #include <iostream> using namespace std; vector<int> twoSum(vector<int>& nums, int target) { int i = 0, j = nums.size() - 1; while(i < j){ if(nums[i] + nums[j] == target){ return {i+1,j+1}; // 返回索引加一的结果 }else if(nums[i]+nums[j]<target){ ++i; }else{ --j; } } return {}; } int main(){ vector<int> v{2,7,11,15}; auto res=twoSum(v,9); for(auto &num :res)cout<<num<<" "; return 0; } ``` #### 备考建议与参经验分享 为了更好地应对蓝桥杯,以下几点备考经验和策略可能会有所帮助: - 提前至少半年时间开始复习,并制定详细的计划表[^2]。 - 加强对 STL 容器的学习,比如 `vector`、`map`、`set` 等容器的操作方式。 - 力求做到每种基本算法都能手写出来并且清楚其复杂度分析。 - 利用力扣平台刷题提升实战能力,目标达到一定数量级以上的练习量。 #### 总结 综上所述,无论是从理论知识还是实践技能来看,充分准备加上不断积累的经验才是取得优异成绩的关键所在。希望上述内容能够对你有所启发!
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值