当前位置: 首页 > ops >正文

[GESP2023012 五级] 2023年12月GESP C++五级上机题题解,附带讲解视频!

本文为GESP 2023年12月 五级的上机题目详细题解和讲解视频,觉得有帮助或者写的不错可以点个赞。

视频讲解制作中!

题目一:小杨的幸运数

B3929 [GESP202312 五级] 小杨的幸运数 - 洛谷

题目大意:

题目定义了大于a的完全平方数都是超级幸运数,然后呢超级幸运数字的整数倍的数字都是幸运数字。

然后题目再定义了一个幸运化的操作,就是把一个数字持续的加一,直到它变成幸运数字。

现在给了你n个数字,让你判断。

如果这个数字本来就是幸运数,那么我们就输出lucky。

如果这个数字不是幸运数字,就把它幸运化,然后再输出。

解题思路:

首先我们很容易想到,如果有这样一个幸运数的数组nums,我们每次遇到一个数字n的时候,我们就方便判断了。

如果有一个包含所有幸运数的数组nums的话,我们很容易想到如下思路:

比如如果这个n小于a,那就需要幸运化,我们就在数组nums中查找一个刚好大于等于a的数字,就是我们想要的幸运数,如果n大于a,我们只需要在数组nums中查找一个大于等于n的数字num,如果num == n,那么n不需要幸运化,直接输出lucky,否则这个数字就是幸运化后的数字。

查找的话,我们可以用二分查找加快速度。

所以现在我们的主要任务是生成nums数组。

这个题目中a的范围是a <= 1e6,每一个数字x的范围为x <= 1e6 + 1。

那么也就是我们要找出第一个大于等于x的幸运数,这个数作为上界mx。

我们注意到(其实也可以暴力生成): 这个数字的为1e6 + 4。

因为4是完全平方数,1e6 + 4是4的倍数。

我们可以用类似于质数筛的方式来选出所有的幸运数。

定义两个数组is(mx + 1)和t,is[i]表示i是否为幸运数,然后t里面放实际的幸运数。

从a到mx,遇到一个完全平方数,我们就对把这个数字的若干倍(但是小于mx)都变成true;

上面的操作的时间复杂度可以近似于O(mx * p),p可以看作是一个很小的常数,约等于1.6,具体证明过程会在视频里面展示,由于涉及到高数知识,不是5级的知识点,只需要知道近似于O(mx)即可。

代码(C++):

#include <bits/stdc++.h>
//https://blog.csdn.net/2401_83669813
using i64 = long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int a, N;std::cin >> a >> N;const int mx = 1e6 + 4;std::vector<bool> is(mx + 1, false);for (int i = a; i <= mx; i++) {int s = std::sqrt(i);if (s * s == i) {for (i64 j = 1; j * i <= mx; j++) {is[i * j] = true;}}}std::vector<int> t;for (int i = 1; i <= mx; i++) {if (is[i]) {t.push_back(i);}}int ans1 = *std::lower_bound(t.begin(), t.end(), a);while (N--) {int x;std::cin >> x;if (x < a) {std::cout << ans1 << "\n";} else if (is[x]) {std::cout << "lucky\n";} else {int ans2 = *std::lower_bound(t.begin(), t.end(), x);std::cout << ans2 << "\n";}}
}

题目二:烹饪问题

B3930 [GESP202312 五级] 烹饪问题 - 洛谷

题目大意:

给你n个数字a1,a2,...,an。你需要在这n个数字中找出两个数字(x, y),使得x & y的值尽可能大,输出这个最大值,n <= 1e6,ai在int范围内。

解题思路:

关键点1:

所有的数字都在Int范围内,那么答案也是一个int类型的数字

关键点2:

&运算是都为1的时候,这一位才是1.

关键点3:

要使得数字尽可能的大,两个数字的高位的1尽可能位置一样!

得出思路:

我们遍历从高到低遍历每一位,也就是遍历bit从31到0,定义变量mask

首先把mask的第bit位设置成1,然后遍历整个数组,看看会不会有两个数字bit位置都有1,如果有

即可保留这个1,这样我们就可以尽可能的保留高位的1!

代码(C++):

#include <bits/stdc++.h>
//https://blog.csdn.net/2401_83669813 csdn: @立志成为算法讲师using i64 = long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}int mask = 0;for (int bit = 31; bit >= 0; bit--) {int cur = mask | (1 << bit);int cnt = 0;for (int x : a) {if ((cur & x) == cur) {cnt++;}if (cnt == 2) {break;}}if (cnt == 2) {mask = cur;}}std::cout << mask << "\n";
}

http://www.xdnf.cn/news/17260.html

相关文章:

  • c++初学day1(类比C语言进行举例,具体原理等到学到更深层的东西再进行解析)
  • WiFi 核心概念与实战用例全解
  • 17.14 CogVLM-17B多模态模型爆肝部署:4-bit量化+1120px高清输入,A100实战避坑指南
  • SimpleMindMap:一个强大的Web思维导图
  • CVRF 是什么?微软弃用 MS 编号后,网络安全的下一个标准
  • 【面经】2025年软件测试面试题,精选100 道(附答案)
  • 为什么通过CreateThread创建的线程调用C/C++运行库函数不稳定
  • 交换机100G模块远距离连接踩坑记录
  • Vibe coding现在能用于生产吗?
  • “鱼书”深度学习进阶笔记(1)第二章
  • 弱电+机房+设备+运维资料合集方案(Word+PPT)
  • trae开发c#
  • Vue3 计算属性与监听器
  • 【MATLAB例程】联邦卡尔曼滤波,主滤波与子滤波融合GPS、IMU、里程计多传感器数据。提供源代码下载链接
  • Zabbix网络发现:自动化监控新利器
  • apiSQL网关调优:释放单节点的最大潜能
  • Trackio:面向机器学习者的本地优先、开源免费的轻量级实验追踪新工具
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成
  • Docker 从入门到实战(一):全面解析容器化革命 | 2025 终极指南
  • Vue 3.2+ 引入的指令 v-memo 性能优化
  • 书生浦语第五期-L1G3-LMDeploy 课程
  • Mac 电脑放在环境变量中的通用脚本
  • Mac下安装Conda虚拟环境管理器
  • 2025小程序怎么快速接入美团核销,实现自动化核销
  • 防火墙概述
  • GPT-OSS重磅开源:当OpenAI重拾“开放”初心
  • 新手向:Python实现图片转ASCII艺术
  • Cell-cultured meat: The new favorite on the future dining table
  • 【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808
  • [202403-E]春日