深入解析:GESP25年9月编程题解析

news/2025/10/26 9:22:29/文章来源:https://www.cnblogs.com/slgkaifa/p/19166470

深入解析:GESP25年9月编程题解析

一级

商店折扣

水题:

#include 
using namespace std;
int main()
{int x,y,n;cin >> x >> y >> n;  // 读取满减门槛 x、减免金额 y、折扣 ndouble p;cin >> p;  // 读取商品总价 pdouble ans1 = p;  // 存储第一种方案的支付金额,初始为原价double ans2 = p;  // 存储第二种方案的支付金额,初始为原价if(ans1 >= x)ans1 -= y;  // 若满足满减条件,应用第一种方案(满 x 减 y)ans2 = ans2 * n / 10;  // 应用第二种方案(打 n 折,即乘以 n / 10)if(ans1 < ans2)printf("%.2lf",ans1);  // 比较两种方案,输出较少的支付金额(保留两位小数)else printf("%.2lf",ans2);return 0;
}

金字塔

水题:

#include 
using namespace std;
int main()
{int n;cin >> n;  // 读取输入的金字塔层数 nint ans = 0;  // 定义变量 ans 用于存储总石块数,初始化为 0// 从第 n 层开始向下计算到第 1 层,累加每层的石块数for(int i = n;i >= 1;i -- )ans += i * i;cout << ans << endl;  // 输出总石块数return 0;
}

二级

优美的数字

水题,数位拆分:

#include 
using namespace std;
int main()
{int n;cin >> n;int ans = 0;for(int i = 1;i <= n;i ++ ){int t = i;int vis = t % 10;int flag = 1;while(t > 0){int num = t % 10;if(num != vis){flag = 0;break;}t /= 10;}if(flag)ans ++ ;}cout << ans << endl;return 0;
}

菱形

解题思路:

老套的打印图形,有点意思,图形打印分为上下两半部分,即区间 [1,(n+1)/2][1,(n + 1) / 2][1,(n+1)/2][(n+1)/2,n][(n + 1) / 2,n][(n+1)/2,n]。对于每行的打印,可以进行分类讨论:

  • num1num1num1 为首先输出的 . 的个数
  • num1num1num1 为输出的 # 的个数
    • midmidmid 为 # 之间需要填充的 . 的个数
    • 若是其值大于 2,则需要使用 midmidmid 填充,num1num1num1 置为 2
  • num3num3num3 为最后输出的 . 的个数
#include 
using namespace std;
int main()
{int n;cin >> n;for(int i = 1;i <= n;i ++ ){if(i <= (n + 1) / 2){int num1 = (n + 1) / 2 - i;int num3 = num1;int num2 = n - num1 - num3;int mid = 0;if(num2 > 2){mid = num2 - 2;num2 = 2;}for(int j = 1;j <= num1;j ++ )cout << ".";if(num2 == 1)cout << "#";else{cout << "#";for(int j = 1;j <= mid;j ++ )cout << ".";cout << "#";}for(int j = 1;j <= num3;j ++ )cout << ".";cout << endl;}else{int num1 = i - (n + 1) / 2;int num3 = num1;int num2 = n - num1 - num3;int mid = 0;if(num2 > 2){mid = num2 - 2;num2 = 2;}for(int j = 1;j <= num1;j ++ )cout << ".";if(num2 == 1)cout << "#";else{cout << "#";for(int j = 1;j <= mid;j ++ )cout << ".";cout << "#";}for(int j = 1;j <= num3;j ++ )cout << ".";cout << endl;}}return 0;
}

三级

日历制作

好题,够恶心,解题思路:

#include 
using namespace std;
int main()
{int m;cin >> m;int a[13] = {0,3,6,6,2,4,7,2,5,1,3,6,1};int b[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};cout << "MON TUE WED THU FRI SAT SUN" << endl;int num = 1;for(int i = 1;i <= a[m] - 1;i ++ )printf("    ");int idx = a[m];while(num <= b[m]){if(idx > 7){cout << endl;idx = 1;}printf("%3d ",num);num ++ ;idx ++ ;}return 0;
}

数组清零

(水题)解题思路:

按要求模拟就行,别死循环

#include 
using namespace std;
const int N = 2e6 + 10;
int a[N];
int main()
{int n;cin >> n;for(int i = 1;i <= n;i ++ )cin >> a[i];int cnt = 0;while(1){int flag = 1;for(int i = 1;i <= n;i ++ ){if(a[i] != 0){flag = 0;break;}}if(flag)break;int maxidx = -1,minidx = -1;int maxnum = -0x3f3f3f3f,minnum = 0x3f3f3f3f;for(int i = 1;i <= n;i ++ ){if(a[i] >= maxnum){maxnum = a[i];maxidx = i;}if(a[i] < minnum && a[i] != 0){minnum = a[i];minidx = i;}}a[maxidx] -= a[minidx];cnt ++ ;}cout << cnt << endl;return 0;
}

四级

排兵布阵

(水题)解题思路:

老套的枚举子矩阵…用个函数封装操作就行

#include 
using namespace std;
const int N = 5050;
int a[N][N];
int judge(int x,int y,int dx,int dy)
{int cnt = 0;for(int i = x;i <= x + dx;i ++ ){for(int j = y;j <= y + dy;j ++ ){if(a[i][j] == 0)return -1;else cnt ++ ;}}return cnt;
}
int main()
{int n,m;cin >> n >> m;for(int i = 1;i <= n;i ++ ){for(int j = 1;j <= m;j ++ ){cin >> a[i][j];}}int ans = 0;for(int x = 1;x <= n;x ++ ){for(int y = 1;y <= m;y ++ ){for(int dx = 0;x + dx <= n;dx ++ ){for(int dy = 0;y + dy <= m;dy ++ ){ans = max(ans,judge(x,y,dx,dy));}}}}cout << ans << endl;return 0;
}

最长连续段

(水题)解题思路:

  • 对数组排序然后去重
  • 对遍历去重后的区间使用双指针即可
#include 
#include 
using namespace std;
const int N = 2e6 + 10;
int a[N];
int main()
{int n;cin >> n;for(int i = 1;i <= n;i ++ )cin >> a[i];sort(a + 1,a + 1 + n);int tail = unique(a + 1,a + 1 + n) - a - 1;int ans = 0;for(int i = 1;i <= tail;i ++ ){int j = i + 1;while(j <= tail && a[j] - a[j - 1] == 1)j ++ ;ans = max(ans, j - i);i = j - 1;}cout << ans << endl;return 0;
}

五级

有趣的数字和

不错的题目:

我们发现,对于连续的四个数字,其中必定有两个奇数,两个偶数,因此我们可以把整个数轴按照区间长度为 4 来进行讨论,通过打表能够更直观的看到该规律,打表代码如下:

#include 
#define int long long
using namespace std;
signed main()
{int idx = 0;// 部分打表for(int i = 0;i <= 31;i ++ ){int t = i;int cnt = 0;while(t > 0){if(t & 1)cnt ++ ;t >>= 1;}idx ++ ;if(cnt & 1)cout << i << " " << "符合条件" << endl;else cout << i << endl;if(idx == 4){cout << endl;idx = 0;}}return 0;
}

打表结果:

0
1 符合条件
2 符合条件
3
4 符合条件
5
6
7 符合条件
8 符合条件
9
10
11 符合条件
12
13 符合条件
14 符合条件
15
16 符合条件
17
18
19 符合条件
20
21 符合条件
22 符合条件
23
24
25 符合条件
26 符合条件
27
28 符合条件
29
30
31 符合条件

对于每个长度为 4 的区间,我们可以对其离散化编号,将 lllrrr 的坐标 / 4 即可得到区间编号,我们把区间编号从 0 开始,那么第 nnn 个区间对应的范围也就是 [n×4,n×4+3][n × 4,n × 4 + 3][n×4,n×4+3]。在这里我们把 num1num1num1 即为 lll 所处的区间编号,num2num2num2 即为 rrr 所处的区间编号,对于每个合理的区间,我们来进行分类讨论:

  • 若是该区间完全被 [l,r][l,r][l,r] 覆盖,我们称之为全覆盖区间,合法区间范围为 [num1+1,num2−1][num1 + 1,num2 - 1][num1+1,num21],其有效计入答案值为两端数字之和 / 中间两个数字之和,由于两端数字之和 = 中间两个数字之和,**因此在这里,我们对全覆盖区间的有效答案求和就可以简单记为两端数字之和。**即:((i×4)+(i×4+3))((i × 4) + (i × 4 + 3))((i×4)+(i×4+3))
  • 对于没有被 [l,r][l,r][l,r] 全覆盖的区间,我们称之为半覆盖区间:
    • 若是 lll 所在的半覆盖区间和 r 所在的半覆盖区间属于同一区间,那么我们暴力枚举区间 [l,r][l,r][l,r] 即可
    • 若是 lllrrr 所在区间不同,我们需要对区间 [l,num1×4+3][l,num1 × 4 + 3][l,num1×4+3][num2×4,r][num2 × 4,r][num2×4,r] 进行暴力枚举
  • 最终答案即为全覆盖区间的有效答案 + 半覆盖区间的有效答案

由此,我们可以用 O(1)O(1)O(1) 时间复杂度来解决这个问题:

#include 
#define int long long
using namespace std;
signed main()
{int l,r;cin >> l >> r;int num1 = l / 4;int num2 = r / 4;int ans = 0;if(num1 == num2){for(int i = l;i <= r;i ++ ){int t = i;int cnt = 0;while(t > 0){if(t & 1)cnt ++ ;t /= 2;}if(cnt & 1)ans += i;}}else{for(int i = l;i <= num1 * 4 + 3;i ++ ){int t = i;int cnt = 0;while(t > 0){if(t & 1)cnt ++ ;t /= 2;}if(cnt & 1)ans += i;}for(int i = num2 * 4;i <= r;i ++ ){int t = i;int cnt = 0;while(t > 0){if(t & 1)cnt ++ ;t >>= 1;}if(cnt & 1)ans += i;}}for(int i = num1 + 1;i <= num2 - 1;i ++ ){ans += ((i * 4) + (i * 4 + 3));}cout << ans << endl;return 0;
}

数字选取

(水题)解题思路:

  • 1 肯定要作为答案加入
  • 奇质数要作为答案加入
  • 但凡 n≥2n \ge 2n2,证明一定存在 2 的幂次方,从 2 的幂次方中选取一个数作为答案加入
#include 
using namespace std;
const int N = 2e6 + 10;
// 埃氏筛法模板
int primes[N];
int st[N];
int idx = 0;
// 返回奇质数的个数
int get_primes(int n)
{for(int i = 2;i <= n;i ++ ){if(!st[i])primes[idx ++ ] = i;for(int j = i;j <= n;j += i)st[j] = true;}int cnt = 0;for(int i = 0;i < idx;i ++ ){if(primes[i] & 1)cnt ++ ;}return cnt;
}
int main()
{int n;cin >> n;int ans = 1 + get_primes(n);// 若是 n >= 2,则一定存在 2 的幂次方if(n >= 2)ans ++ ;cout << ans << endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Anthropic Agent Skills 技术解析与实践

Anthropic Agent Skills 技术解析与实践2025-10-26 09:16 姜 萌@cnblogs 阅读(0) 评论(0) 收藏 举报前言 Anthropic 在 2025 年 10 月推出了 Agent Skills 框架,这是一个让通用 AI 获得专业技能的机制。本文通过分…

d40: vue杂项问题 - 详解

d40: vue杂项问题 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

day04-Coze工作流案例(中草药识别-菜谱生成-智能换脸)

今日内容coze的工作流---》coze智能体中:工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排 干一件时间的流程:第一步干什么,第二步干什么,最后干什么。。…

记力扣2271.毯子覆盖的最多白色砖块数 练习理解 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【Android之路】 Kotlin 的 data class、enum class、sealed interface

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

精通-Pandas-探索性分析-全-

精通 Pandas 探索性分析(全)原文:Mastering Exploratory Analysis with Pandas 协议:CC BY-NC-SA 4.0零、前言 在本书中,您将深入学习 Pandas,这是一个 Python 库,用于处理,转换和分析数据。 这是用于探索性数…

【图像处理-基础知识】SFIT特征解析 - 教程

【图像处理-基础知识】SFIT特征解析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

深入解析:【FPGA+DSP系列】——(2)DSP最小核心板进行ADC采样实验(采集电位器输出电压)

深入解析:【FPGA+DSP系列】——(2)DSP最小核心板进行ADC采样实验(采集电位器输出电压)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

精通-HTML5-表单-全-

精通 HTML5 表单(全)原文:zh.annas-archive.org/md5/835835C6B2E78084A088423A2DB0B9BD 译者:飞龙 协议:CC BY-NC-SA 4.0前言 Web 浏览者可能永远不会了解应用程序的背景,比如 HTML5、CSS3、响应式网页设计或 PH…

ABC429F Shortest Path Query 题解

AtCoder 写在前面 赛时没想出来,赛后经过大神和题解点拨有点思路了。之前确实没咋遇见过多少线段树维护矩阵的题。那就写写题解当积累trick了吧。 题意 给出一张\(3 \times N\) 的矩阵,内含# . 两种字符。其中# 代表…

苏维埃日报08.高三生福音?大屏课表软件ClassIsland助你度过高三

\(1.\)什么是\(ClassIsland\)? \(ClassIsland\)是一款适用于班级多媒体屏幕的课表的信息显示工具,可以一目了然地显示各种信息。本应用的名字灵感源于\(iOS\)灵动岛(\(Dynamic\) \(Island\))功能。 \(2.\)如何下载…

创建平面设计网站-全-

创建平面设计网站(全)原文:zh.annas-archive.org/md5/76ED001744425FC67A6333D19F2CBD18 译者:飞龙 协议:CC BY-NC-SA 4.0前言 扁平设计是一种数字设计风格,近年来在网页和用户界面设计中成为最大的趋势之一。它…

2025年优质的造纸橡胶辊,天然橡胶辊品牌厂家排行榜

2025年优质的造纸橡胶辊、天然橡胶辊品牌厂家排行榜 在造纸、印刷、纺织、木业、光伏等行业中,橡胶辊的质量直接影响生产效率和产品品质。优质的橡胶辊需具备耐磨、耐高温、耐腐蚀等特性,同时要求精准的尺寸控制和稳…

软件神器 --- x64db插件 之 SharpOD

软件神器 --- x64db插件 之 SharpODhttps://www.unknowncheats.me/forum/d...=file&id=21224 下载解压后将SharpOD dp32位放置32位的x86dbg的32位目录plugin目录下,64位同理 重启软件打开插件

2025年耐用的移动搅拌车,搅拌车优质厂家推荐榜单

2025年耐用的移动搅拌车:搅拌车优质厂家推荐榜单 在建筑工程、道路施工和矿山作业等领域,移动搅拌车是不可或缺的重要设备。随着技术的进步,市场对搅拌车的耐用性、效率和智能化要求越来越高。2025年,选择一台高质…

2025年靠谱的方形冷却塔,横流式冷却塔用户口碑最好的厂家榜

2025年靠谱的方形冷却塔,横流式冷却塔用户口碑最好的厂家榜在工业生产和商业建筑领域,冷却塔作为关键的散热设备,其性能和质量直接影响整个系统的运行效率和能耗水平。随着2025年能效标准的进一步提高,方形冷却塔和…

2025年口碑好的硅胶制品,密封硅胶制品厂家最新实力排行

2025年口碑好的硅胶制品,密封硅胶制品厂家最新实力排行在当今工业制造领域,硅胶制品因其优异的耐温性、绝缘性、耐腐蚀性和弹性等特点,已成为汽车、医疗、电子、家电等行业不可或缺的关键零部件。随着2025年的到来,…

2025年耐用的北美款三防灯,单双管三防灯厂家推荐及选择指南

2025年耐用的北美款三防灯:单双管三防灯厂家推荐及选择指南 在工业照明、户外照明及特殊环境(如潮湿、多尘、腐蚀性场所)中,三防灯(防水、防尘、防腐)的需求持续增长。2025年,北美市场对高防护等级(IP65/IP66…

2025年优质的高速电吹风开关,电吹风开关厂家最新用户好评榜

2025年优质高速电吹风开关厂家最新用户好评榜:权威推荐与选购指南 随着家电行业智能化与高性能需求的提升,高速电吹风开关作为核心部件,其可靠性、安全性和耐久性直接影响用户体验。为帮助厂商与采购商快速锁定优质…

2025年比较好的冷拔无缝钢管,大口径无缝钢管热门厂家推荐榜单

2025年比较好的冷拔无缝钢管,大口径无缝钢管热门厂家推荐榜单在工业制造、石油化工、电力能源等众多领域,无缝钢管作为重要的工业材料,其质量与性能直接关系到工程项目的安全与效率。随着2025年的到来,市场对高品质…