第十三届蓝桥杯省赛大学B组编程题(c++)

2024-04-12 12:52

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

D.刷题统计

二分(AC):

注意:二分时右边界 right 的确定

#include<iostream>
using namespace std;
long long a,b,n;
bool check(long long x){long long t=x/7;x%=7;long long temp=0;if(x<=5) temp=x*a;else temp=5*a+(x-5)*b;long long cnt=t*(5*a+2*b)+temp;return cnt>=n;
}
int main(){cin>>a>>b>>n;long long left=0,right=n/min(a,b)+1;while(left<right){long long mid=(left+right)/2;if(check(mid)) right=mid; else left=mid+1;}cout<<left<<endl;return 0;
}

E.修剪灌木

数学思维(AC):

#include<iostream>
using namespace std;
int n;
int main(){cin>>n;for(int i=1;i<=n;i++){int left=2*(i-1);int right=2*(n-i);cout<<max(left,right)<<endl;}return 0;
}

F.X 进制减法

暴力+模拟(AC):

十年OI一场空,不开浪浪见祖宗

#include<iostream>
using namespace std;
typedef long long ll;
const int N=1e5+5;
const ll mod=1e9+7;
ll n,ma,mb,ans1,ans2,a[N],b[N],x[N],v[N];
int main(){ios::sync_with_stdio(false),cin.tie(0);cin>>n>>ma;for(int i=ma-1;i>=0;i--) cin>>a[i];cin>>mb;for(int i=mb-1;i>=0;i--) cin>>b[i];for(int i=max(ma-1,mb-1);i>=0;i--) x[i]=max((long long)2,max(a[i]+1,b[i]+1));for(int i=0;i<=max(ma,mb)-1;i++){if(i==0) v[i]=1;else{v[i]=v[i-1]*x[i-1];v[i]%=mod;}}for(int i=ma-1;i>=0;i--) ans1+=v[i]*a[i],ans1%=mod;for(int i=mb-1;i>=0;i--) ans2+=v[i]*b[i],ans2%=mod;cout<<(ans1-ans2+mod)%mod<<endl;return 0;
}

G.统计子矩阵

二维前缀和+暴力(70 points):

#include<iostream>
using namespace std;
const int N=505;
int n,m,k,a[N][N];
long long ans;
int main(){cin>>n>>m>>k;for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {cin>>a[i][j];a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int x=1;x<=i;x++){for(int y=1;y<=j;y++){if(k>=(a[i][j]+a[x-1][y-1]-a[x-1][j]-a[i][y-1])){ans++;}}}}}cout<<ans<<endl;return 0;
}

优化(AC):

#include<iostream>
using namespace std;
const int N=505;
int n,m,k,a[N][N];
long long ans;
int main(){cin>>n>>m>>k;for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {cin>>a[i][j];a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];}}for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){for(int l=1,r=1;r<=m;r++){while(l<=r&&k<(a[j][r]+a[i-1][l-1]-a[j][l-1]-a[i-1][r])){l++;}ans+=r-l+1;}}}cout<<ans<<endl;return 0;
}

这题暴力70足以...... 

H.积木画

递推与递归(AC):

#include<iostream>
using namespace std;
const long long mod=1e9+7;
const int N=1e7+5;
int n,f[N];
int main(){cin>>n;f[1]=1,f[2]=2,f[3]=5;if(n>=4){for(int i=4;i<=n;i++){f[i]=2*f[i-1]%mod+f[i-3]%mod;f[i]%=mod;}}cout<<f[n]<<endl;return 0;
}

思路和洛谷题单算法1-4递推与递归 P1990 覆盖墙壁 一模一样......

I.李白打酒加强版

动态规划+记忆化搜索(AC):

#include<iostream>
#include<cstring>
using namespace std;
const int N=105;
const int mod=1e9+7;
int n,m,dp[N][N][N];//当前酒量,剩余遇见店的次数,剩余遇见花的次数
int dfs(int x,int y,int z) {//出现负数不合法if(x<0||y<0||z<0) return 0;//当前酒量不可能大于剩余遇见花的次数"if(x>z) return 0;//最后一次必须遇见花并且酒量只剩1if(z==1) return y==0&&x==1;//记忆化if(dp[x][y][z]!=-1) return dp[x][y][z];//逢店加倍,遇花减一dp[x][y][z]=(dfs(x*2,y-1,z)+dfs(x-1,y,z-1))%mod;return dp[x][y][z];
}
int main(){memset(dp,-1,sizeof(dp));cin>>n>>m;cout<<dfs(2,n,m)<<endl;return 0;
}

J.砍竹子

unorder_set特点:无序不重复的集合
//头文件:
#include<unordered_set>
//常用函数:
unorder_set.empty();  //判断容器是否为空,空为true,反之为false
unorder_set.size();   //返回容器大小
unorder_set.begin();  //返回迭代器开始
unorder_set.end();    //返回迭代器结束
unorder_set.find(x);  //返回x在迭代器的位置
unorder_set.count(x); //返回x在容器的个数
unorder_set.insert(x);//将x插入到容器中
unorder_set.erase(x); //删除x,成功返回1,反之返回0
unorder_set.clear();  //清空容器

解释样例:

#include<iostream>
#include<unordered_set>
#include<cmath>
typedef long long ll;
using namespace std;
ll ans;            //累计不同的数的个数
unordered_set<ll>s;//保存上次出现过的数
int main() {int n;cin>>n;for(int i=1;i<=n;i++) {ll temp;cin>>temp;unordered_set<ll>cur;  //每次读取一个数时,用来记录当前数的所有中间结果while(temp!=1) {cur.insert(temp);  //将当前数加入当前集合if (s.find(temp)==s.end()) ans++;//如果当前数不在之前的集合内,ans自增temp = sqrtl(temp/2+1);          //计算下一个数}s=cur; //更新保存所有出现过的数的集合}cout<<ans<<endl;return 0;
}

这题真难想...... 

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



http://www.chinasem.cn/article/897189

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的