华中师范大学蓝桥杯第十一届校内模拟赛

2020/3/22 8:00-12:00



题目还是比省赛要简单的,我9:25就做完了。


第一题

分析:

简单题,求给定的1200000的正约数的个数。我们可以暴力判因数,也可以对x分解质因数。x = p1^t1 * p2^ t2 * ... * pk^tk,则约数个数为(t1+1) * (t2+1) * ... * (tk+1)

暴力代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
void f(int x) {int ans = 0;for(int i=1;i<=x;++i) if(x%i==0) ++ans;cout<<ans<<endl;
}
int main(void) {f(1200000);return 0;
}

分解质因数代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
void getAns(int x) {long long res = 1;for(int i=2;i<=x/i;++i) {if(x%i) continue;int c = 0;while(x%i==0) ++c,x/=i;res = res * (c+1);}if(x>1) res *= 2;cout<<res<<endl;
}
int main(void) {getAns(1200000);return 0;
}

答案为:96


第二题:

答案为:15.125GB = 15.125*1024MB = 15488MB


第三题:

分析:

我们通过分析或寻找规律,可以得到n个节点的二叉树叶子节点个数最多为floor((n+1)/2)

答案:(2019+1) / 2 = 1010


分析:

从1到2019循环一遍,逐个判断即可。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main(void) {int ans = 0;for(int i=1;i<=2019;++i) {int x = i;int ok = 0;while(x) {if(x%10==9) ok=1;x/=10;}ans += ok;} cout<<ans<<endl;return 0;
}

答案:544


第五题:

分析:

题意很简单,就是问有多少个数,钱面有比它小的,后面有比它大的。
        只要前面的最小值小于x,后面的最大值大于x即可。我们可以维护前缀最大值和后缀最大值。

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int a[1001],Max[1001],Min[1001];
int main(void) {int n;cin>>n;for(int i=1;i<=n;++i) scanf("%d",a+i);Min[1] = a[1];for(int i=2;i<=n;++i) Min[i] = min(Min[i-1],a[i]);Max[n] = a[n];for(int i=n-1;i>=1;--i) Max[i] = max(Max[i+1],a[i]);int res = 0;for(int i=2;i<n;++i) {if(Min[i-1]<a[i]&&Max[i+1]>a[i]) ++res;}cout<<res<<endl;return 0;
}

第六题:

分析:

dfs即可。暴力判断应该也可以,但是1E6的nlogn常数稍大。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
int n,ans;
void dfs(int v,int pre) {if(pre*10+v>n) return;++ans;pre = pre*10+v;for(int i=v;i<10;++i)dfs(i,pre);
}
int main(void) {cin>>n;ans = 0;for(int i=1;i<=9;++i)dfs(i,0);cout<<ans<<endl;return 0;
}

第七题:

分析:

按题意模拟即可。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int a[1000];
char s[1000];
bool isY(char c) {return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u');
}
int main(void) {cin>>(s+1);int len = strlen(s+1);for(int i=1;i<=len;++i) {if(isY(s[i])) a[i] = 1;else a[i] = 0;} int p = 1;if(a[1]!=0) {puts("no");return 0;}while(p<len&&a[++p]==0);if(a[p]!=1) {puts("no");return 0;}while(p<len&&a[++p]==1);if(a[p]!=0) {puts("no");return 0;}while(p<len&&a[++p]==0);if(a[p]!=1) {puts("no");return 0;}puts("yes");return 0;
}

第八题:


样例输入:

4 5
.g...
.....
..g..
.....
2

样例输出

gggg.
gggg.
ggggg
.ggg.

分析:

按照题意模拟即可。n,m,k范围都是1000,模拟k天可能会被卡。我们可以做两个小优化如果根本没有g,那么以后也没有g,直接输出如果已经长满草了,那么剩下的天数就不用再模拟了

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <vector>
using namespace std;
const int N = 1001;
char a[N][N];
bool vis[N][N];
int n,m,k;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
bool ok(int x,int y) {return (x>=0&&x<n&&y>=0&&y<m);
}
vector<pair<int,int> >v;
int main(void) {scanf("%d%d",&n,&m);int sz = 0;for(int i=0;i<n;++i) scanf("%s",a[i]);scanf("%d",&k);for(int i=0;i<n;++i) for(int j=0;j<m;++j)if(a[i][j]=='g') ++sz,v.push_back(make_pair(i,j)),vis[i][j]=true;if(sz==0) { //根本就没有草for(int i=0;i<n;++i) puts(a[i]);return 0;}while(k--) {int add = 0;for(int i=0;i<sz;++i) {for(int j=0;j<4;++j) {int x = v[i].first+dx[j];int y = v[i].second+dy[j];if(ok(x,y)&&!vis[x][y]) vis[x][y]=true,v.push_back(make_pair(x,y)),a[x][y]='g',++add; }}sz += add;if(sz==n*m) break; //已经长满了}for(int i=0;i<n;++i) puts(a[i]);return 0;
}

第九题:


分析:

每个序列是否能再拓展只和倒数两个数有关。我们可以借此定义二维状态。设dp[x][y]代表最后一个为y,倒数第二个数为x的数列能拓展出的数列个数。定义好状态我们就可以记忆化搜索了。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
const int N = 1001;
const int mod = 10000;
int dp[N][N];
int dfs(int p1,int p) {if(dp[p1][p]) return dp[p1][p];int ans = 1, dif = abs(p1-p);for(int i=1;i<dif;++i)ans = (ans + dfs(p,i))%mod;return dp[p1][p] = ans;
}
using namespace std;
int main(void) {int n;while(cin>>n) {int res = 0;for(int i=1;i<=n;++i)res = (res+dfs(n,i))%mod;cout<<res<<endl;}return 0;
}


第十题:


样例输入:

5 3
3 1 2 5 4

样例输出:

3 5 4

自测的样例输入:

12 3
1 1 7 7  1 2 3 6 6 6  8 4

自测的样例输出:

7 8 4

分析:

由题意值,我们要求的是字典序最大的长度为m的子序列。字典序最大,我们肯定要贪心。我们再取面的数的时候,还需要考虑后面还有没有节目可以选满m个。所以,我们可以每次从[pos[i-1]+1,n-m+i]这个区间中找一个最靠前的最大值作为pos[i]。静态区间最大值我们可以用RMQ查询,也可以用线段树或树状数组。

代码:

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int N = 100001;
int Max[N][20],a[N],Log2[N]={-1},r[N],n;
int query(int x,int y) {if(x>y) swap(x,y);int j = Log2[y-x+1];int pa = Max[x][j], pb = Max[y-(1<<j)+1][j];return a[pa]<a[pb]?pb:pa;
}
int main(void) {int m,n;scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)scanf("%d",a+i);for(int i=1;i<=n;++i) Max[i][0] = i,Log2[i]=Log2[i>>1]+1;for(int j=1;(1<<j)<n;++j) {for(int i=1;(1<<j)+i-1<=n;++i) {int pa = Max[i][j-1], pb = Max[i+(1<<(j-1))][j-1];Max[i][j] = a[pa]<a[pb]?pb:pa;}}r[1] = query(1,n-m+1);for(int i=2;i<=m;++i)r[i] = query(r[i-1]+1,n-m+i);for(int i=1;i<=m;++i)printf("%d%c",a[r[i]],i==n?'\n':' '); return 0;
}

xzc
2020/3/22 11:16


[蓝桥杯第十一届校内模拟赛] Apare_xzc相关推荐

  1. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  2. 蓝桥杯十二届校内模拟赛 黄绿蓝小球方案(DFS)

    问题描述 小蓝有黄绿蓝三种颜色的小球,分别为 R, G, B 个.同样颜色的小球没有区别. 小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t_1,将接下来的连续小球个数记为 ...

  3. 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  4. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  5. 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  6. 计蒜客2020蓝桥杯大学A组模拟赛题解

    计蒜客2020蓝桥杯大学A组模拟赛题解 蓝桥杯的话,去年拿了C++组的国二.今年报名了新成立的Python组,不知道能不能摸到国一的鱼 模拟赛链接如下: https://www.jisuanke.co ...

  7. 蓝桥杯 Web 应用开发模拟赛首次公开!参赛选手速进!

    第十三届蓝桥杯大赛报名通道正式开启,你行动起来了吗? 很多细心的小伙伴一定看到了,这届蓝桥杯大赛中新增了 Web 应用开发组.这是 Web 应用开发首次出现在杯赛中,所以没有历年真题可以供参赛选手刷题 ...

  8. 蓝桥杯2021 第二期模拟赛

    目录: 1.二进制数 2.整倍数 3.要求序列 4.无向图的结点 5.字母距离 6.时间调整 7.平行四边形 好久不见xdm,今天写什么呢?今天被蓝桥杯模拟赛打了一顿,说难也不难 一起来看吧 1.二进 ...

  9. 蓝桥杯第十一届单片机国赛

    [冉冰的成长日记010]欧耶!!十篇啦,虽然好像都是在水,嘿嘿,希望能拿个国二,我想吃大餐///哈哈哈哈哈哈哈哈哈哈哈 嗯好,今天写了第十一届国赛,u1s1 不算难,什么新的模块都没有,就是比省赛功能 ...

最新文章

  1. DataGrid中自带的分页功能的使用
  2. 压缩目录Linux常用的几种文件压缩解压方法
  3. ELASTIC API
  4. 人体轮廓_女性人体油画轮廓柔和生动,优美动人,你喜欢吗?
  5. 【华为云技术分享】大数据实践解析(下):Spark的读写流程分析
  6. (05)FPGA入门条件
  7. 富士康工业互联:生产口罩优先用于内部防疫 预计对经营业绩影响较小
  8. android采用videoView播放视频(包装)
  9. 【K-DB干货】浅谈KRAC内存融合技术
  10. pe linux 引导修复工具下载,winpe系统引导修复工具
  11. ansys有限元分析论述
  12. 制作双绞线时,T568b、T568a 线序分别是什么?
  13. 恒星物联-河道液位监测系统方案 液位监测
  14. C语言之用循环来打印各种各样的图案
  15. canvas 画哆啦A梦头像
  16. 一个光子的能量是多少?
  17. Hadoop-HDFS读文件
  18. Dapp区块链 | wireshark抓包2
  19. C语言中的输出99乘法表4种方法
  20. 吴恩达机器学习(二十六) 数据压缩与可视化、PCA

热门文章

  1. impdp导入指定表 oracle_Oracle expdp/impdp导出导入命令及数据库备份(转)
  2. GPU选型调研!3090依旧是性价比之王
  3. H5判断手机是普通屏幕还是全屏的方法
  4. 移动端echarts点击全屏按钮横屏全屏展示
  5. html+css实现横向时间线
  6. 移动端 vue返回上一步
  7. linux dd命令卡住,linux下显示dd命令的进度:
  8. 数据库索引和索引底层实现原理
  9. MATLAB新年烟花祝MATLABer新年快乐
  10. 【JS继承】JS继承之构造函数继承