第十二届蓝桥杯大赛软件赛省赛C/C++大学B组

2024-04-07 20:44

本文主要是介绍第十二届蓝桥杯大赛软件赛省赛C/C++大学B组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第十二届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

文章目录

  • 第十二届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
    • 1、空间
    • 2、卡片
    • 3、直线
    • 4、货物摆放
    • 5、路径
    • 6、时间显示
    • 7、砝码称重
    • 8、杨辉三角形
    • 9、双向排序
    • 10、括号序列

1、空间

在这里插入图片描述

1MB = 1024KB
1KB = 1024byte
1byte=8bit
// cout<<"256*1024*1024/4"; // 记住 1024 即可

2、卡片

在这里插入图片描述
在这里插入图片描述

往简单的讲就是一个排列组合的问题,因为可以选自身,所以n张卡片最多有 n + C2n中方案。
我们可以把它想象成一个开口向上的二次函数然后根据x去求最小的y值。

#include<iostream>
#define ll long long
using namespace std;
ll n,k;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;// (x^2+x)/2 = n// 2n = x^2+x// x^2+x-2n=0 求xfor(ll i=1;i<=1e9;i++){if(i*i+i>=2*n){cout<<i;return 0; }} return 0;
}

3、直线

在这里插入图片描述

#include<iostream>
#include<set>
#define pii pair<double,double>
#define ll long long
using namespace std;
int x=20,y=21;
set<pii> st;
void check(int x1,int y1,int x2,int y2){if(x1==x2||y1==y2)return;double k=(y2-y1)*1.0/(x2-x1);// y1=k*x1+b y2=k*x2+b// k=(y2-y1)/(x2-x1)替代即可算出b=(x2*y1-x1*y2)/(x2-x1) double b=(x2*y1-x1*y2)*1.0/(x2-x1);st.insert({k,b});
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);for(int i=0;i<y;i++){for(int j=0;j<x;j++){for(int k=0;k<y;k++){for(int t=0;t<x;t++){check(j,i,t,k);}}}}cout<<st.size()+x+y; return 0;
}

4、货物摆放

在这里插入图片描述

先去找到这个数的所有因子,再去枚举这些因可能成为的结果。最后计算这些结果。

#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
ll n = 2021041820210418;
ll a[50001],cnt=0;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);for(int i=1;i<=sqrt(n);i++){if(n%i==0){a[++cnt]=i;if(i*i!=n)a[++cnt]=n/i;}}int res=0;for(int l=1;l<=cnt;l++)for(int w=1;w<=cnt;w++)for(int h=1;h<=cnt;h++)if(a[l]*a[w]*a[h]==n)res++;cout<<res;return 0;
}

5、路径

在这里插入图片描述

#include<iostream>
#define ll long long
using namespace std;
const int n = 2025;
//ll d[n][n];
ll INF = 1e17;
// 循环遍历超时,辗转相除法高效
int gcd(int a,int b){if(a%b==0)return b;return gcd(b,a%b);
}
int lcm(int a, int b){return a / gcd(a, b) * b;}
//void floyd(){
//	for(int k=1;k<=n;k++)
//		for(int i=1;i<=n;i++)
//		 	for(int j=1;j<=n;j++)
//		 		if(d[i][k]!=INF&&d[k][j]!=INF)d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
//}int d[n];
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);for(int i=0;i<n;i++)d[i]=INF;d[1]=0;for(int i=1;i<n;i++)for(int j=i+1;j<n&&j-i<=21;j++){d[j]=min(d[j],lcm(i,j)+d[i]);}cout<<d[2021];return 0;
}

6、时间显示

在这里插入图片描述
在这里插入图片描述

时间换算,思维创新。

#include<iostream>
#define ll long long
using namespace std;
ll n,h,m,s; 
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;n=n/1000;//舍弃毫秒 1s = 1000ms n=n%(24*60*60);// 一天24小时 h=n/3600;m=(n-h*3600)/60;s=n-3600*h-60*m;if(h<10){cout<<"0"<<h<<":";}else{cout<<h<<":";}if(m<10){cout<<"0"<<m<<":";}else{cout<<m<<":";}if(s<10){cout<<"0"<<s;}else{cout<<s;}return 0;
}

7、砝码称重

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<queue>
#include<cmath>
#include<cstring>
using namespace std;
const int N = 1e5+10;
queue<int> q;
int n,w,cnt;
bool ans[N];
int main(){memset(ans,0,sizeof(ans));cin>>n;q.push(0);for(int i=0;i<n;i++){cin>>w;queue<int> tmp_q;while(!q.empty()){int x=q.front();q.pop();if(ans[x+w]==false){ans[x+w]=true;cnt++;tmp_q.push(x+w);}if(ans[abs(x-w)]==false){ans[abs(x-w)]=true;cnt++;tmp_q.push(abs(x-w));}tmp_q.push(x);}q=tmp_q;}cout << cnt-1;//为0的情况不要return 0;
}

8、杨辉三角形

在这里插入图片描述
在这里插入图片描述

只会写朴素算法,优化的算法,还没看懂。。。。。
这个只能过40%。

#include<iostream>
#define ll long long
using namespace std;
const int N = 2e3+5;
int dp[N][N],n;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;if(n==1){cout<<"1";return 0;} dp[1][1]=dp[2][1]=dp[2][2]=1;for(int i=3;i<N-1;i++){for(int j=1;j<=i;j++){if(j==1||j==i){dp[i][j]=1;}else{dp[i][j]=dp[i-1][j]+dp[i-1][j-1];}if(dp[i][j]==n){// (a1+an)/2  a1=i,an=i-1,多出来的 + j  cout<<i*(i-1)/2+j;return 0;}}}return 0;
}

9、双向排序

在这里插入图片描述
在这里插入图片描述
直接暴力截决。只能过60%。

#include<iostream>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
int n,m;
vector<int> v; 
bool cmp(int a,int b){return a>b;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++)v.push_back(i);for(int i=1;i<=m;i++){int p,q;cin>>p>>q;if(p==0)sort(v.begin(),v.begin()+q,cmp);else sort(v.begin()+q-1,v.end());}for(const auto& x:v)cout<<x<<' ';return 0;
}

10、括号序列

在这里插入图片描述
在这里插入图片描述

这题没看懂。。。

这篇关于第十二届蓝桥杯大赛软件赛省赛C/C++大学B组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve