蓝桥杯第十二届c++大学B组详解

news2024/10/7 16:24:27

目录

1.空间

2.直线

3.路径

4.卡片

5.货物摆放

6.时间显示

7.砝码称重

8.杨辉三角

9.双向排序

10.括号序列


 1.空间

 题目解析:1Byte = 8bit  1kb = 1024B  1MB = 1024kb;

先将256MB变成Byte = 256 * 1024 * 1024; 再将32位 变成Byte就是 32 / 8 = 4;

那么就是(256 * 1024 * 1024) / 4 = 67108864;

2.直线

 题目解析:直线方程式y= kx + b;

k = (y2 - y1)  / (x2 - x1);

b = (y1 * x2 - y2 * x1)  / (x2 - x1);

使用double类型怕精度损失。再使用set进行去重。最后还要考虑垂直和平行的情况就要加上m + n;

#include <iostream>
#include<set>
using namespace std;


set<pair<double,double>> s;

void check(int x1, int y1, int x2, int y2)
{
    if(x1 == x2 || y1 == y2)//平行或者垂直;
        return;
    double k = (y2 - y1) * 1.0 / (x2 - x1);
    double b = (y1 * x2 - y2 * x1) * 1.0 / (x2 - x1);
    s.insert({k, b});
}

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++)
            {
                 check(x1, y1, x2, y2);
            }
         }   
      }
   }
   cout << s.size() + 20 + 21<< endl;
   return 0;
}

3.路径

 题目解析:采用到一个弗洛伊德算法。大家可以自己再csdn里面看一下弗洛伊德算法求图的路径的博客,就很容易上手这个题目.使用二维数组进行存放连接的点。这个使用三次暴力可以在devc++里面跑几十秒就过了,但是在蓝桥杯官网会超时.但是这不重要,重要的是这是个填空题.

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
#define INT 0x3f3f3f3f
ll Edge[2022][2022];
int gcd(int a, int b)//最大公约数
{
	if (b == 0)
		return a;
	return gcd(b, a % b);
}
int lcm(int a, int b)//最小公倍数
{
	int c = a * b;
	return c / gcd(a, b);
}
int main()
{
	//初始化
	memset(Edge, INT, sizeof(Edge));
	for (int i = 1; i <= 2021; i++)
	{
		for (int j = 1; j <= 2021; j++)
		{
			if (i == j)Edge[i][j] = 0;
			else {
				if (abs(i - j) <= 21)//判断差的绝对值是否小于等于21
				{
					Edge[i][j] = lcm(i, j);
				}
			}
		}
	}

	for (int k = 1; k <= 2021; k++)
	{
		for (int i = 1; i <= 2021; i++)
		{
			for (int j = 1; j <= 2021; j++)
			{
				if (Edge[i][j] > Edge[i][k] + Edge[k][j])
				{
					Edge[i][j] = Edge[i][k] + Edge[k][j];
				}
			}
		}
	}
	cout << Edge[1][2021];
	return 0;
}

4.卡片

题目解析:动态dp又来罗, dp[i]表示i张卡片不重复的数量,并且我们可以弄出状态方程.

1张: 1;

2张: (1,1), (1,2),(2,2); 三种不重复的数量, 

3张: (1,1), (1,2), (2,2), (1,3), (2,3), (3,3); 就是六种不重复的数量,

那么状态方程dp[i] = ap[i - 1] + i;

#include <iostream>
#include<set>
using namespace std;

int dp[100000] = {0};

int main()
{
   int n;
   cin >> n;
   dp[1] = 1;
   for(int i = 2; i < 10000; i++)
   {
      dp[i] = dp[i - 1] + i;
      if(n <= dp[i])
      {
         cout << i << endl;
         return 0;
      }
   }
   return 0;
}

5.货物摆放

 题目解析:暴力解法,但是还有要稍加修改。如果三个数中有两个是相同的那么一共有三种方法,如果三个数都不同就会有六种方法,三个数全部相同不符合题目意思。这个也是蓝桥杯官网跑不了,但是dev可以等个几十秒就出来了.

#include<iostream>
using namespace std;
#define n 2021041820210418
//n=a*b*c
typedef long long ll;
int ants = 0;
int main()
{
	for (ll a = 1; a * a * a <= n; a++)
	{
		if (n % a == 0)
		{
			for (ll b = a; a * b * b <= n; b++)
			{
				if (n / a % b == 0)
				{
					ll c = n / a / b;
					if (a == b && a == c)ants = 0;
					else if (a == b || a == c || c == b) ants += 3;
					else ants += 6;
				}
			}
		}
	}
	cout << ants << endl;
	return 0;
}

6.时间显示

 题目解析:根据题目意思进行划时间,但是输入的是毫秒需要变成秒。如果觉得很容易想错,你可以想一下有一个题目提取数字的每一位.

#include<bits/stdc++.h>
using namespace std;
 
int main()
{
    long long int n;
    cin >> n;
    n = n / 1000;
    n = n % 86400;//去掉除了最后一天的前面的天数;24*60*60
    int h, m, s;
    h = n / 3600;//求得最后一天的小时
    n = n % 3600;
    m = n / 60;//分钟
    s = n % 60;//秒数
    printf("%02d:%02d:%02d",h,m,s); //输出时间常用的形式,不用判断了
    return 0;
}

7.砝码称重

 题目解析:背包问题,采用动态dp,dp[i][j]表示第i个砝码拿到重量j的方案。如果第i-1个砝码可以拿到j个重量那么i个砝码也可以拿到j个重量, 同样i也可以拿到j重量加上/减去输入的砝码的重量,最后只要将可以称重的砝码进行加和就可以算出结果.

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

int dp[105][100005];

int main()
{
    int n;
    cin >> n;
    //从前i个物品中拿到总重量是j的集合。
    dp[0][0] = 1;

    for(int i = 1; i <= n; i++)
    {
        int a;
        cin >> a;
        for(int j = 0; j <= 100000; j++)
        {
           if(dp[i - 1][j])
           {
               dp[i][j] = 1;
               dp[i][j + a] = 1;
               dp[i][abs(j - a)] = 1;
           }
        }
    }

    int ans = 0;
    for(int i = 1; i <= 100000; i++)
    {
        if(dp[n][i])
           ans++;
    }
    cout << ans << endl;
    return 0;
}

8.杨辉三角

题目解析: 这里开始就变得不妙了,这题只过了部分用例,又更好的办法挺难想到的,大家可以看看其他佬的博客.鄙人不才写不出来.

观察上面的规律之后我们可以使用两个数组进行查找.两个数组不断变化每一层,我们就可以得到每一层的数据的位置.

#include <iostream>
using namespace std;
#include<vector>

vector<long long int> v1;
long long int n;
long long int ans = 0;//算n的位置的.

int main()
{
   cin >> n;
   if(n == 1)
   {
      cout << 1 << endl;
      return 0;
   }

   v1.push_back(1);
   ans++;

   for(int i = 0; i < v1.size(); i++)
   {
       vector<long long int> v2;
       if(i == 0)
       {
           v2.push_back(1);
           ans++;
       }
       else
       {
           ans++;
           if(n == v1[i - 1] + v1[i])
           {
               cout << ans << endl;
               return 0;
           }
           v2.push_back(v1[i - 1] + v1[i]);
       }

       ans++;
       v2.push_back(1);
       v2 = v1;
   }
   return 0;
}

9.双向排序

 题目解析:直接用sort进行排序.其他方法又会的大佬麻烦教教我,阿里嘎多.

 

#include<iostream>
#include<algorithm>
using namespace std;
int n,m,p,q;
int a[100005];

int cmp(int x, int y)
{
	return x > y;
}

int main()
{
	cin >> n >> m;
	for(int i = 0; i < n; i++)
	{
		a[i] = i+1;
	}
	
	while( m > 0 )
	{
		m--;
		cin >> p >> q;
		if(p == 0) 
		{
			sort(a, a+q, cmp);	// 逆排
		}
		else
		{
			sort(a+q-1, a+n);	// 正排
			
		}
	}
	for(int i = 0; i < n; i++)
		cout << a[i] << " ";
	return 0;
}

10.括号序列

 题目解析:这里贴一篇博主的优质博客大家看看吧,自己太菜了,还得多练练.

括号序列--蓝桥杯_括号序列蓝桥杯-CSDN博客

#include <iostream>
#include <cstring>
#include <algorithm>
#include <stdio.h>
using namespace std;

typedef long long LL;
const int MOD=1000000007;
const int N=5010;
LL dp[N][N];
char str[N];
int len;
LL func()
{
    memset(dp,0,sizeof(dp));
    dp[0][0]=1;
    for(int i=1;i<=len;i++)//一个括号一个括号的判断
    {
        if(str[i]=='(')
        {
            for(int j=1;j<=len;j++)
            {
                dp[i][j]=dp[i-1][j-1];//不用考虑dp[i][0] 因为dp[i-1][-1]是不合法的情况 不存在 为0
            }
        }
        else
        {
            dp[i][0]=(dp[i-1][0]+dp[i-1][1])%MOD;//特判防止越界 这里数据短,用的是优化前的推断
            for(int j=1;j<=len;j++)
            {
                 dp[i][j]=(dp[i-1][j+1] + dp[i][j-1])%MOD;
            }
        }
    }
    for(int i=0;i<=len;i++)
        if(dp[len][i]) return dp[len][i];//我们需要的就是长度为len添加括号的合法情况,而从前往后遍历出现的第一个有可能的情况就是需要括号数最少的情况,因为左括号可以加很多个,我们仅需添加最少的情况
        return -1;
}
int main()
{
    scanf("%s",str+1);//从下标为1开始
    len=strlen(str+1);
    LL l=func();
    reverse(str+1,str+len+1);
    for(int i=1;i<=len;i++)
    {
        if(str[i]=='(') str[i]=')';
        else str[i]='(';
    }
    LL r=func();
    cout<<l*r%MOD;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能前沿成科技竞争新高地

以下文章来源&#xff1a;经济参考报 近日&#xff0c;首届中国具身智能大会&#xff08;CEAI 2024&#xff09;在上海举行。作为人工智能领域的前沿热点&#xff0c;具身智能正逐步走进现实&#xff0c;成为当前全球科技竞争的新高地、未来产业的新赛道、经济发展的新引擎。 “…

在Linux终端查找指定类型的文件并统计数量

下面举例说明&#xff1a; find /path/to/directory -type f -exec file {} \; | grep "MIDI"它的作用是在指定的目录&#xff08;/path/to/directory&#xff09;中搜索所有的文件&#xff08;-type f&#xff09;&#xff0c;然后使用file命令检查每个文件的类型&a…

《QT实用小工具·二十四》各种数学和数据的坐标演示图

1、概述 源码放在文章末尾 该项目实现了各种数学和数据的坐标演示图&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef FRMMAIN_H #define FRMMAIN_H#include <QWidget> class QAbstractButton;namespace Ui { class frmMain; }class fr…

AWD靶机实战第二天:使用python脚本获取flag

上一部分我们通过读源码和利用源码审计的工具找到了这个漏洞&#xff0c;但是在比赛的时候有很多靶机&#xff0c;我们去一个个的注册&#xff0c;一个个的登录然后输入很浪费时间&#xff0c;所以我选择写一个python脚本来实现自动获得flag以及自动提交flag. 首先我们将这次的…

群联AI云防护中的防盗链技术原理及其作用探析---

一、引言 随着云计算和AI技术的快速发展&#xff0c;云防护方案已经成为现代企业防范网络攻击和保护数字资产的重要手段之一。群联科技作为存储解决方案和技术服务的领导者&#xff0c;已将其AI技术应用于云端防护系统中&#xff0c;并特别强化了防盗链功能&#xff0c;以帮助…

第十四届蓝桥杯省赛真题-幸运数

代码及解析: #include <iostream> using namespace std;bool check(int x) {int tmpx,len0;while(tmp){len;tmp/10;}//算位数的方法 if(len%21)return 0;//直接retrun 0 int tlen/2;int ans10,ans20;while(t--){ans1x%10;//加每一位x/10; }while(x){ans2x%10;x/10;}if(…

什么是SSL重签(reissue)?具体怎么做?

SSL重签&#xff08;reissue&#xff09;是指在SSL/TLS证书到期或需要更新时&#xff0c;证书持有者向证书颁发机构&#xff08;CA&#xff09;申请新的证书的过程。这通常是因为原有证书的有效期即将结束&#xff0c;或者证书因为某些原因&#xff08;如密钥泄露、证书损坏等&…

计算机视觉——基于深度学习UNet实现的复杂背景文档二值化算法实现与模型训练

1. 引言 阈值分割可以被视为一个分类问题&#xff0c;通常涉及两个类别&#xff0c;这也是为什么阈值分割也被称为二值化。对于文档图像&#xff0c;我们期望阈值算法能够正确地将墨水分类为黑色&#xff0c;将纸张分类为白色&#xff0c;从而得到二值化图像。对于数字灰度图像…

自动驾驶硬件系统-激光雷达(Lidar)测量模型

自动驾驶硬件系统-激光雷达(Lidar)测量模型 激光雷达(Lidar, Light Detection And Ranging)是Google系自动驾驶技术路线广泛应用的硬件传感器。 附赠自动驾驶学习资料和量产经验&#xff1a;链接 1、激光雷达(Lidar)的工作原理 通过持续不断的发射激光束&#xff0c;激光束遇…

pytest常用钩子函数

1、什么叫钩子函数 在Pytest框架中&#xff0c;钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码&#xff0c;以实现特定的行为&#xff0c;操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。 如…

2024热门电商项目,“视频号/蝴蝶号小店”必须排在首位!

大家好&#xff0c;我是电商小布。 在如今这个流量为王的时代&#xff0c;电商行业的崛起也是非常迅速&#xff0c;且占据了各大行业的头部位置。 借助这个优势&#xff0c;也产生了各种各样的电商项目。 如果你问我在2024年&#xff0c;有什么必须考虑的创业项目&#xff0…

JR-SMD201网络直播解码器

详细介绍&#xff1a; JR-SMD201网络直播解码器&#xff0c;支持AVS/H.265/H.264/MPEG2解码&#xff0c;支持IP输入&#xff0c;支持1080P/1080I/720P/576I/480I多种分辨率&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持多种输入方式IP 接口丰富&#xff0c;CV…

双链表的操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#…

【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)

官方教程非常长&#xff0c;我看了很认可&#xff0c;但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求。所以有了这篇文章。【写给自己看的&#xff0c;里面半句废话的解释都没有&#xff0c;如果看不懂的话直接看官方教程再看我的】 我是不打算一开始就用…

计算机进制

进制 进制也就是进位制&#xff0c;是人们规定的一种进位方法对于任何一种进制—X进制&#xff0c;就表示某一位置上的数运算时是逢X进一位 十进制是逢十进一&#xff0c;十六进制是逢十六进一&#xff0c;二进制就是逢二进一&#xff0c;以此类推&#xff0c;x进制就是逢x进…

【汇编语言实战】统计个数

已知10个分布在0至100内的正整数&#xff0c;统计大于等于60的数的个数和小于60的数的个数 C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int arr1[]{11,33,73,52,93,84,67,56,64,75};int num10;for(int i1;i<10;i){if(arr1[i]>60){num1;}}p…

关于帆软报表取OA选择框-下拉列表值的解决方案

问题&#xff1a;制度一览表每次在OA端增加或修改制度类别后&#xff0c;都要在帆软报表修改后才能正确显示。 原因分析&#xff1a;以前大家没有找到OA下拉列表的维护表&#xff0c;采用的是在帆软端通过内置数据集来解决&#xff0c;需要人工维护。 解决方案&#xff1a; …

删除有序链表中重复的元素 【C语言】

参考&#xff1a;https://blog.csdn.net/ABABC1234/article/details/131329837 删除有序链表中重复的元素&#xff0c;比如 输入链表1&#xff0c;2&#xff0c;2&#xff0c;3&#xff0c;3&#xff0c;4。输出链表1&#xff0c;4 输入链表1&#xff0c;1&#xff0c;2&#…

ExoPlayer停止更新,建议升级到AndroidX Media3

1. 大家常用的ExoPlayer地址&#xff1a;GitHub - google/ExoPlayer: An extensible media player for Android ExoPlayer是谷歌官方提供的媒体播放库&#xff0c;大家在开发项目中经常使用ExoPlayer播放音视频&#xff0c;谷歌官方已经明确表示该库在2024-04-03停止更新&…

SMT用料全检抽检

下载地址百度网盘&#xff1a; https://pan.baidu.com/s/1kDn_l8P6ReC4Lj5tgt-v4w?pwd5y41 提取码:5y41 1、扫描输入车间线体 2、根据线体获取在线订单 3、选择(全检|抽检|换接新料)开始 4、根据提示扫描站位和料号核对 5、核对成功再扫描核对下一组