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

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

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
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值