目录

试题F:递增三元组

试题G:螺旋折线

试题H:日志统计

试题I:全球变暖

试题J:乘积最大


试题F:递增三元组

【问题描述】

【输入格式】

【输出格式】

【样例输入】

【样例输出】

27

【代码解析】

暴力:三重循环计算所有满足ai < bj < ck的数,时间复杂度为O(),只能通过一半的数据。

排序+二分:对于a,b,c数组进行排序。枚举每一个bj,利用二分思想,求出满足bj > ai的最大下标i,则比bj小的a的元素的数量为i + 1,同理求出满足bi < ck的最小下标k,则比bj大的c的元素的数量为n - k,即对于bj存在 (i + 1) * (n - k)种方案满足题意。时间复杂度为O(nlogn),可以通过所有数据

前缀和:和第二种方法思路一样,运用前缀和的思想求比bi小的a的元素的数量及比bi大的c的元素的数量。时间复杂度为O(n),可以通过所有数据。

​排序+二分
#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;const int N = 1e5 + 10;int a[N], b[N], c[N];int main()
{int n;cin >> n;for(int i = 0; i < n; i ++) cin >> a[i];for(int i = 0; i < n; i ++) cin >> b[i];for(int i = 0; i < n; i ++) cin >> c[i];sort(a, a + n);sort(b, b + n);sort(c, c + n);LL res = 0;for(int i = 0; i < n; i ++){LL l = 0, r = n - 1, n1 = 0, n2 = 0;while(l < r){int mid = l + r + 1 >> 1;if(a[mid] < b[i]) l = mid;else r = mid - 1;}if(a[r] < b[i]) n1 = r + 1;l = 0, r = n - 1;while(l < r){int mid = l + r >> 1;if(c[mid] > b[i])   r = mid;else l = mid + 1;}if(c[r] > b[i]) n2 = n - r;res += (LL)n1 * n2;    }cout << res;return 0;
}​
​
前缀和
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>using namespace std;const int N = 1e5 + 10;typedef long long LL;int a[N], b[N], c[N];
int cnt[N], as[N], cs[N], s[N];int n;int main()
{cin >> n;for(int i = 0; i < n; i ++) scanf("%d", &a[i]), a[i] ++;for(int i = 0; i < n; i ++) scanf("%d", &b[i]), b[i] ++;for(int i = 0; i < n; i ++) scanf("%d", &c[i]), c[i] ++;for(int i = 0; i < n; i ++) cnt[a[i]] ++;for(int i = 1; i < N; i ++) s[i] = s[i - 1] + cnt[i];for(int i = 0; i < n; i ++) as[i] = s[b[i] - 1];memset(s, 0, sizeof s);memset(cnt, 0, sizeof cnt);for(int i = 0; i < n; i ++) cnt[c[i]] ++;for(int i = 1; i < N; i ++) s[i] = s[i - 1] + cnt[i];for(int i = 0; i < n; i ++) cs[i] = s[N - 1] - s[b[i]];LL res = 0;for(int i = 0; i < n; i ++){res += (LL)as[i] * cs[i];}cout << res;return 0;
}​​

试题G:螺旋折线

【问题描述】

【输入格式】

【输出格式】

输出dis(X, Y)

【样例输入】

0 1

【样例输出】

3

【代码解析】

模拟 + 找规律,时间复杂度为O(1),注意输出的数据量可能会爆int范围,记得开long long来存。

​
#include <iostream>
#include <cstring>
#include <cmath>using namespace std;typedef long long LL;int main()
{int x, y;cin >> x >> y;if(abs(x) <= y){int n = y;cout << (LL)(2 * n) * (2 * n - 1) + x - (- n) << endl; }else if(x >= abs(y)){int n = x;cout << (LL)(2 * n) * (2 * n) + n - y << endl;}else if(abs(y) + 1 >= abs(x) && y < 0){int n = abs(y);cout << (LL)(2 * n) * (2 * n + 1) + n - x << endl;}else{int n = abs(x);cout << (LL)(2 * n - 1) * (2 * n - 1) + y - (- n + 1) << endl;}return 0;
}​

试题H:日志统计

【问题描述】

【输入格式】

【输出格式】
按从小到大的顺序输出热帖id。每个id一行。

1
2
3
4
5
6
7
8
9
【输入样例】

7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3

【输出样例】

1
3

【代码解析】

模拟题,用排序+双指针

1、对所有的赞按照时间从小到大排序

2、通过双指针i,j维护长度不大于d的区间,并记录该区间的中所有帖子获得的赞数

​
#include <iostream>
#include <cstring>
#include <algorithm>#define x first
#define y secondusing namespace std;const int N = 1e5 + 10;typedef pair<int, int> PII;PII logs[N];
bool st[N];
int cnt[N];int n, d, k;int main()
{scanf("%d%d%d", &n, &d, &k);for(int i = 0; i < n; i ++){int ts, id;scanf("%d%d", &ts, &id);logs[i] = {ts, id};}sort(logs, logs + n);for(int i = 0, j = 0; i < n; i ++){int id = logs[i].y;cnt[id] ++;while(logs[i].x - logs[j].x >= d){cnt[logs[j].y] --;j ++;}if(cnt[id] >= k)    st[id] = true;}for(int i = 0; i < N; i ++) if(st[i])   cout << i << endl;return 0;
}​

试题I:全球变暖

【问题描述】
你有一张某海域NxN像素的照片,".“表示海洋、”#"表示陆地,如下所示:

【输入格式】

第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。

照片保证第1行、第1列、第N行、第N列的像素都是海洋。

请你计算:依照科学家的预测,照片中会有多少岛屿会被完全淹没。

【输出格式】

一个整数表示答案。
1
2
3
4
5
6
7
8

【输入样例】

7

.##…
.##…
…##.
…####.
…###.

【输出样例】

1

【代码解析】

遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量total,以及被淹没陆地的数量bound,若total == bound表示完整淹没的一个岛屿

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>#define x first
#define y secondusing namespace std;typedef pair<int, int> PII;const int N = 1010;char g[N][N];
bool st[N][N];int n;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};void bfs(int i, int j, int &total, int &bound)
{queue<PII> q;st[i][j] = true;q.push({i, j});while(q.size()){total ++;bool is_bound = false;auto t = q.front();q.pop();for(int i = 0; i < 4; i ++){int x = t.x + dx[i], y = t.y + dy[i];if(x < 0 || x >= n || y < 0 || y >= n)  continue;if(!st[x][y] && g[x][y] == '#'){st[x][y] = true;q.push({x, y});}if(g[x][y] == '.')is_bound = true;}if(is_bound == true) bound ++;}}int main()
{cin >> n;for(int i = 0; i < n; i ++) cin >> g[i];int cnt = 0;for(int i = 0; i < n; i ++)for(int j = 0; j < n; j ++){if(g[i][j] == '#' && !st[i][j]){int bound = 0;int total = 0;bfs(i, j, total, bound);if(total == bound)  cnt ++;}}cout << cnt;return 0;
}

试题J:乘积最大

【问题描述】

【输入格式】

【输出格式】

一个整数,表示答案。
1
2
3
4
5
6
7
8
9
10
【输入样例】

5 3
-100000
-10000
2
100000
10000

【输出样例】

999100009
1
2
3
4
5
6
7
8
9
10
再例如:
【输入样例】

5 3
-100000
-100000
-2
-100000
-100000

【输出样例】

-999999829

【代码解析】

分类讨论+贪心:

情况1:n == k,求出数据的乘积取模即可。

情况2:n < k && k为偶数,分析可知,不论数据如何,总能取到数据的乘积为正数。

情况3:n < k && k为奇数 && 数据不全为负数,分析可知,先取最大的数据,此时即可转换为情况2继续进行操作。

情况4:n < k && k为奇数 && 数据全为负数,分析可知,此时无论如何取,最终答案必为负数,这时我们的贪心思路为先取最大的数据,之后取的k - 1个数据保证其乘积最小,即可求出最大的乘积。

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;const LL mod = 1000000009;const int N = 1e5 + 10;int a[N];int n, m;int main()
{cin >> n >> m;for(int i = 0; i < n; i ++) scanf("%d", &a[i]);sort(a, a + n);int i = 0, j = n - 1, sign = 1;LL sum = 1;if(m % 2){sum *= a[j] % mod;if(a[j] < 0)    sign = -1;j --;m --;}while(m){if((LL)a[i] * a[i + 1] * sign >= (LL)a[j] * a[j - 1] * sign){sum = sum * a[i] % mod * a[i + 1] % mod;i += 2;m -= 2;}else{sum = sum * a[j] % mod * a[j - 1] % mod;j -= 2;m -= 2;}}if(sum > 0)cout << sum % mod;elsecout << 0-((0-sum)%mod);return 0;}

最后大家有疑问的话可以评论区留言讨论,第一次写博客,有写的不好的地方,不清楚的地方还请多多包涵指正。

第九届蓝桥杯C/C++ 大学B组省赛编程题题目及答案解析相关推荐

  1. 2018第九届蓝桥杯-决赛-Java大学-C组

    标题:年龄问题 s夫人一向很神秘.这会儿有人问起她的年龄,她想了想说: "20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍". 你能算出s夫人现在的年龄吗? ...

  2. 2018第九届蓝桥杯大赛软件类B组C/C++省赛题解

    2018第九届蓝桥杯大赛软件类B组C/C++省赛目录 试题 A:第几天(结果填空) 试题 B:明码(结果填空) 试题 C:乘积尾0(结果填空) 试题 D:测试次数(结果填空) 试题 E:快速排序(结果 ...

  3. 【蓝桥杯Web】第十三届蓝桥杯(Web 应用开发)省赛真题

    前言 第十三届蓝桥杯全国软件和信息技术专业人才大赛(软件类)新开了Web应用开发比赛,本文介绍第十三届蓝桥杯Web应用开发的省赛题目以及解析. 文章目录 前言 一.水果拼盘 二.展开你的扇子 三.和手 ...

  4. 蓝桥杯 笔记整理【JavaB组省赛真题、约数、全排列模板、排列组合、等差等比求和公式、eclipse快捷键、集合、快速求a^n、进制转换(Integer、BigInteger)、动态数组Vector】

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

  5. 2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解

    写在前面 以下代码,目前均可通过民间OJ数据(dotcpp & New Online Judge), 两个OJ题目互补,能构成全集,可以到对应链接下搜题提交(感谢OJ对题目的支持) 如果发现任 ...

  6. 第九届蓝桥杯大赛个人赛决赛(软件类)真题--C大学B组--换零钞题解(C语言)

    标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...

  7. 2019第十届蓝桥杯-决赛-Java大学-C组

    试题 A: 奇数倍数 本题总分: 5 分 [问题描述] 请你找到最小的整数 X 同时满足: • X 是 2019 的整倍数 • X 的每一位数字都是奇数 [答案提交] 这是一道结果填空的题,你只需要算 ...

  8. 第十届蓝桥杯C语言大学B组C/C++ 试题A:组队

    [问题描述] 作为篮球队教练,你需要从以下名单中选出1号位至5号位各一名球员,组成球队的首发阵容. 每位球员担任1号位至5号位时的评分如下表所示.请你计算首发阵容1号位至5号位的评分之和最大可能是多少 ...

  9. 【蓝桥杯】Java开发A组省赛真题+详细解析

    1. 世纪末的星期 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破.   还有人称今后的某个世纪末的12月31日,如果是星期一则会-   有趣的是,任何一个世纪末的年份的12月31 ...

  10. 蓝桥杯的c语言编译器,第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组比赛心得(还在更新)...

    第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组 考生须知: 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为4小时.时间截止后,提交答案无效. 在考试强制结束 ...

最新文章

  1. mongodb 学习笔记 2 --- 修改器
  2. python selenium chrome获取每个请求内容_python+selenium调用chrome打开网址获取内容
  3. 【C语言深入】[001] static 关键字:
  4. 16.1117 NOIP 模拟赛
  5. 无法连接iphone软件更新服务器_NX许可证错误:无法连接至许可证服务器系统。SPLM_LICENSE_SERVER错误[15]...
  6. 制作nginx的spec分享
  7. android微信网页视频播放器,关于微信使用内置播放器播放视频的办法
  8. 115网盘如何打开php文件格式,115网盘真实地址解析工具
  9. 周九常:个人知识管理的三个重点领域
  10. 程序员都在读的实战书,你看懂封面了吗?
  11. LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP
  12. 使用Hystrix实现自动降级与依赖隔离
  13. vue中el-radio-group点击事件,双击取消
  14. java毕业设计软件工程专业教辅平台课程子系统mybatis+源码+调试部署+系统+数据库+lw
  15. 机器学习算法(决策树)-Lect03
  16. C语言学习——保留小数点后n位并四舍五入
  17. 微信小程序——焦点图 可预览查看大图缩放(多张可左右滑动) 带页码 loading 加载中 / https不显示图
  18. Iphone IPA软件制作教程
  19. android 自动加微信,Android实现微信自动向附近的人打招呼(AccessibilityService)
  20. 为什么我的iPhone iOS 15少了一些新功能

热门文章

  1. 【SLAM小车】硬件_TB6612FNG设计记录
  2. urule开源版自定义动作库注意事项
  3. Debian/Ubuntu系统命令终端提示无法定位软件包解决方法
  4. 3. react脚手架
  5. HTML多选框,全选,多选
  6. R数据分析:方法与案例详解--自学笔记
  7. linux 查看内存 单位,linux ps 内存 单位
  8. 干货 | 挖掘旅游热点吸引年轻人,携程自动热点投放系统的背后玩法
  9. navicat报错SSH:Unable to load key
  10. 中国各省的简称及简称的由来