2024CCPC郑州站超详细题解(含题面)ABFHJLM(河南全国邀请赛)

文章目录

  • 前言
  • A Once In My Life
  • B 扫雷 1
  • F 优秀字符串
  • H 随机栈
  • J 排列与合数
  • L Toxel 与 PCPC II
  • M 有效算法

前言

这是大一博主第一次参加xcpc比赛,虽然只取得了铜牌,但是收获满满,在了解了和别人的差距后会更加激励自己去学习,下面我把我们队会写的题目来给大家讲解,有代码有思路超详细!

A Once In My Life

在这里插入图片描述
这一题是一个构造题,我们需要构造一个幸运数,让这个幸运数是n的倍数。
那么我们先来思考,什么是幸运数?是不是必须包含123456789,还需要至少包含两个d,那么13456789d肯定是一个幸运数。但是这个数字不一定是n的倍数,那么我们如何在不改变12346789d的结构的同时让这个数字变为n的倍数呢?根据观察k和n的范围,我们不难猜想,我们可以再1323456789d后面补上n的长度个0,就比如n是233,那么我们先来一个数字等于123456789d000,补上三位0,此时这个数字仍然不是n的倍数,但是我们让这个数字加上n,再减去这个数字除n的余数,此时这个数字就一定是n的倍数,那么k就等于这个数除n即可得到答案。(减去这个数字除n的余数不会改变前面123456789d这个结构)
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define for1 for(int i = 1;i <= n;i++)
#define for0 for(int i = 0;i < n;i++) 
#define forn1 for(int j = 1;j <= n;j++) 
#define forn0 for(int j = 0;j < n;j++) 
#define form1 for (int j = 1; j <= m; j++)
#define form0 for (int j = 0; j < m; j++)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define arrn int* arr = new int[n+2];arr[0] = 0,arr[n+1]=0
#define carr cin >> arr[i]
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl '\n'
int main() {IOS;int _;cin >> _;while (_--){int n;int d;cin >> n >> d;int len = to_string(n).size();long long  luck = 1ll*1234567890 + d;luck *= pow(10, len);luck = luck + n;luck -= luck % n;long long ans = luck / n;cout << ans << endl;}return 0;
}

B 扫雷 1

在这里插入图片描述
这一题是一个贪心题但是不太难,我们贪心的思路就是我们从第一个格子开始走,如果走到的位置的价格是最小的(这里最小的意思是如果继续往后走就再也遇不见这么便宜的价格的意思),那么我们就选择在这里购买。这个是贪心的思路,那么我们怎么判断某个位置的最小值呢?(最小值的意思和刚才一样)?我们可以构建一个dp表dp[i],表示从i出发走到结尾,能遇见的最小值,转移方程为dp[i] = min(dp[i+1],arr[i]);
题解如下:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define for1 for(int i = 1;i <= n;i++)
#define for0 for(int i = 0;i < n;i++) 
#define forn1 for(int j = 1;j <= n;j++) 
#define forn0 for(int j = 0;j < n;j++) 
#define form1 for (int j = 1; j <= m; j++)
#define form0 for (int j = 0; j < m; j++)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define arrn int* arr = new int[n+2];arr[0] = 0,arr[n+1]=0
#define carr cin >> arr[i]
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl '\n'
#define mod  1000000007
#define t() int _; cin >> _; while (_--)
int arr[200010];
int dp[200010];
int main() {IOS;int n;cin >> n;for (int i = 1; i <= n; i++){cin >> arr[i];}for (int i = n; i > 0; i--){if (i == n){dp[i] = arr[i];}else{dp[i] = min(dp[i + 1], arr[i]);}}int money = 0;int ans = 0;for (int i = 1; i <= n; i++){money++;if (arr[i] == dp[i] && money >= arr[i]){ans += (money / arr[i]);money %= arr[i];}}cout << ans << endl;return 0;
}

F 优秀字符串

在这里插入图片描述
这一题是一个签到题,全场都通过了。
这题的思路就和题目给你的一样按照题目说的做就行了。
题解如下:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define for1 for(int i = 1;i <= n;i++)
#define for0 for(int i = 0;i < n;i++) 
#define forn1 for(int j = 1;j <= n;j++) 
#define forn0 for(int j = 0;j < n;j++) 
#define form1 for (int j = 1; j <= m; j++)
#define form0 for (int j = 0; j < m; j++)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define arrn int* arr = new int[n+2];arr[0] = 0,arr[n+1]=0
#define carr cin >> arr[i]
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl '\n'
#define mod  1000000007
#define t() int _; cin >> _; while (_--)
int main() {IOS;int t;cin >> t;int ans = 0;while (t--){string s;cin >> s;set<char>a;if (s.size() != 5)continue;if (s[2] != s[4])continue;for (int i = 0; i <= 3; i++){a.insert(s[i]);}if (a.size() == 4)ans++;}cout << ans << endl;return 0;
}

H 随机栈

在这里插入图片描述
这题是一道简单的数学题,思路非常简单,我们出栈的时候出去的元素必须是当前栈里面最小的值,比如栈里面有1,2,3我们想让最终序列是非单调递减的话就必须先拿1,我们每次出栈的时候只需要求出取出当前最小值的概率即可,代码实现的话我们是用了一个map<int,int>键值表示入栈的元素,实值表示该元素的个数,入栈的话我们就mp[元素的值]++,出栈的时候就
mp[元素的值]–,mp中的最小值就是mp.begin().first,需要注意的是我们需要一个变量来记录已经出栈的元素中的最大值,如果当前栈的最小的元素要比这个变量的值大,那么我们直接输出0即可,因为已经不可能构造出非递减序列了。

J 排列与合数

在这里插入图片描述
首先经过观察不难发现只要结尾是0或者2或者4或者6或者8的五位数一定是个合数因为他们都是2的倍数,如果这个五位数没有一个数字是02468,那么就输出97531,题目最后的样例给了这是个合数,那么我们的思路就是遍历这5个数字如果某一位的数字是02648之一那么就交换这一位和结尾哪一位,(需要注意如果结尾是0的话就不能交换因为有可能会导致前导0的出现例如21350会变成01352)
题解如下:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define for1 for(int i = 1;i <= n;i++)
#define for0 for(int i = 0;i < n;i++) 
#define forn1 for(int j = 1;j <= n;j++) 
#define forn0 for(int j = 0;j < n;j++) 
#define form1 for (int j = 1; j <= m; j++)
#define form0 for (int j = 0; j < m; j++)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define arrn int* arr = new int[n+2];arr[0] = 0,arr[n+1]=0
#define carr cin >> arr[i]
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl '\n'
#define mod  1000000007
#define t() int _; cin >> _; while (_--)
int main() {IOS;int t;cin >> t;while (t--){string s;cin >> s;bool f = false;for (int i = 0; i < 5; i++){if (s[4] == '0')f = true;if ((s[i] == '2' || s[i] == '4' || s[i] == '6' || s[i] == '8' || s[i] == '0')&&s[4]!='0'){f = true;swap(s[i], s[4]);}}if (f)cout << s << endl;else cout << "97531" << endl;}return 0;
}

L Toxel 与 PCPC II

在这里插入图片描述
这一题是一个简单的动态规划题,我们建立dp表dp[i]表示排查到第i个bug时所需的最小时间,我们可以思考第i个bug可以怎么修复,他要么自己单独修复,要么跟着第i-1个一起修复,要么跟着第i-2个一起修复…跟着第1个一起修复,那么我们就可以再来一个循环来判定第i个跟着谁一起修复是最小的。但是这样的话复杂度会变为On方,所以我们要进行优化,根据提议n的范围是2e5,非常小,我们很容易想到如果连续修复太多个bug的话这个数得四次方是远大于从头开始扫描的时间,经过打表观察22的四次方刚好是大于2e5最小整数,所以如果要同时修复的bug大于22时我们肯定是不选的,我们只要求同时修复bug数小于22的,复杂度可以大大降低。我们只需要从max(1,i-22)到 i 这个区间选出最小值。(需要注意的是dp[0]记得开为0,并且需要long long)
题解如下:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define for1 for(int i = 1;i <= n;i++)
#define for0 for(int i = 0;i < n;i++) 
#define forn1 for(int j = 1;j <= n;j++) 
#define forn0 for(int j = 0;j < n;j++) 
#define form1 for (int j = 1; j <= m; j++)
#define form0 for (int j = 0; j < m; j++)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define arrn int* arr = new int[n+2];arr[0] = 0,arr[n+1]=0
#define carr cin >> arr[i]
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl '\n'
#define mod  1000000007
#define t() int _; cin >> _; while (_--)
int arr[200010];
vector<long long>dp(200010, LONG_MAX);
int main() {IOS;int n,m;cin >> m >> n;for (int i = 1; i <= n; i++){cin >> arr[i];}dp[0] = 0;dp[1] = 1ll*arr[1] + pow(1, 4);for (int i = 2; i <= n; i++){int j = 1;if (i - j + 1 >= 22)j = i - 21;for(;j<=i;j++)dp[i] = min(dp[j - 1] + arr[i] + (i-j+1)* (i - j + 1)* (i - j + 1)* (i - j + 1),dp[i]);}cout << dp[n] << endl;return 0;
}

M 有效算法

在这里插入图片描述
本题考验二分知识,思路是二分k的取值,就按第一组样例来说当我们k取值为1的时候我们遍历数组想让|8-x|<=k1的话x的取值范围是7-9,想让|3-x|<=k2的话x的取值范围是1-5,两者x的区间不重合,说明肯定没有x能同时让|8-x|<=k1和|3-x|<=k2,所以不成立,当k=2的时候我们发现每一组x的区间都有重合的地方,那么此时a数组一定是可以全都变成x的,并且当k>2时毫无疑问绝对都可以符合,k的取值是否达标具有单调性,所以可以用二分来枚举。
题解如下:

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define for1 for(int i = 1;i <= n;i++)
#define for0 for(int i = 0;i < n;i++) 
#define forn1 for(int j = 1;j <= n;j++) 
#define forn0 for(int j = 0;j < n;j++) 
#define form1 for (int j = 1; j <= m; j++)
#define form0 for (int j = 0; j < m; j++)
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define arrn int* arr = new int[n+2];arr[0] = 0,arr[n+1]=0
#define carr cin >> arr[i]
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl '\n'
#define mod  1000000007
#define t() int _; cin >> _; while (_--)
int a[300010];
int b[300010];
int n;
bool cheak(int k)
{long long ml = a[1] - 1ll * b[1] * k;long long mr = a[1] + 1ll * b[1] * k;for (int i = 2; i <= n; i++){long long ll = a[i] - 1ll * b[i] * k;long long rr = a[i] + 1ll * b[i] * k;if (ll > ml)ml = ll;if (rr < mr)mr = rr;}if (mr < ml)return false;return true;
}
int main() {IOS;int t;cin >> t;while (t--){cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= n; i++)cin >> b[i];int l = 0, r = 1e9;while (l <= r){int mid = (l + r) >> 1;if (cheak(mid))r = mid-1;else l = mid+1;}cout << l << endl;}return 0;
}

其余的题目前我还不会,等我补完咯再讲吧,如果觉得博主讲的不错请不要忘记给博主一个免费的关注,点赞,收藏支持一下哦~。

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

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

相关文章

Python从0到POC编写--函数

数学函数&#xff1a; 1. len len() 函数返回对象&#xff08;字符、列表、元组等&#xff09;长度或项目个数&#xff0c; 例如&#xff1a; str "python" len(str)2. range range() 函数返回的是一个可迭代对象&#xff08;类型是对象&#xff09;&#xff0c;…

并行执行的4种类别——《OceanBase 并行执行》系列 4

OceanBase 支持多种类型语句的并行执行。在本篇博客中&#xff0c;我们将根据并行执行的不同类别&#xff0c;分别详细阐述&#xff1a;并行查询、并行数据操作语言&#xff08;DML&#xff09;、并行数据定义语言&#xff08;DDL&#xff09;以及并行 LOAD DATA 。 《并行执行…

vm虚拟机扩容centos磁盘内存

1.查看虚拟机扩展前磁盘内存 df -h 2.关机情况下扩展磁盘内存 3.对扩容的磁盘分区 fdisk /dev/sda 输入n新增分区&#xff0c;回车&#xff0c;选择p&#xff0c;回车 为分区设置分区格式&#xff0c;在Fdisk命令处输入&#xff1a;t 分区号用默认 3&#xff08;或回车&…

OSS证书自动续签,一分钟轻松搞定,解决阿里云SSL免费证书每3个月失效问题

文章目录 一、&#x1f525;httpsok-v1.11.0支持OSS证书自动部署介绍支持特点 二、废话不多说上教程&#xff1a;1、场景2、实战Stage 1&#xff1a;ssh登录阿里云 ECSStage 2&#xff1a;进入nginx &#xff08;docker&#xff09;容器Stage 3&#xff1a;执行如下指令Stage 3…

测试环境搭建整套大数据系统(十六:超级大文件处理遇到的问题)

一&#xff1a;yarn出现损坏的nodemanger 报错现象 日志&#xff1a;1/1 local-dirs usable space is below configured utilization percentage/no more usable space [ /opt/hadoop-3.2.4/data/nm-local-dir : used space above threshold of 90.0% ] ; 1/1 log-dirs usabl…

01-02-2

1、typedef的使用 a.语法 typedef 原名 别名&#xff1b;。 ​ typedef struct student {int num;char name[20];char sex; }stu,*pstu;//stu相当于struct student这个类型&#xff0c;*pstu相当于struct student * 别名的理解方法&#xff1a;若是字母前面有符号&#xff0…

SOUI4里使用字体回退

在新版本的SOUI里render-skia导出了一个新的函数用于字体回退功能。Render_Skia_SetFontFallback 函数原型如下&#xff1a; EXTERN_C void SOUI_COM_API Render_Skia_SetFontFallback(FontFallback fontFallback);因为我的工程是使用动态库&#xff0c;这里可以直接获取到这…

如何用微信小程序实现远程控制4路控制器/断路器

如何用微信小程序实现远程控制4路控制器/断路器呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制4路控制器/断路器&#xff0c;支持4路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xf…

内容与图像一对多问题解决

场景复现 分析&#xff1a; 其实这是两给表&#xff0c;一个内容表&#xff0c;一个图片表&#xff0c;一对多的关系。 解决思路: 1. 先上传图片拿到图片的List集合ids&#xff0c;返回值是集合的ids&#xff0c;给到前端 2. 再添加内容表的数据生成了id&#xff0c;遍历查…

佳博打印机如何设置打印模式为热敏模式

1、打开电脑搜索框&#xff0c;如下图输入打印机: 2、点击打印机设置&#xff0c;如下图&#xff1a; 3、点击打印机首选项&#xff0c;如下图&#xff1a; 4、点击下图“卷”进行设置 也可对打印机间距高度进行调整

【深度学习】探秘PSD:合成到真实去雾框架的实例解析

揭秘PSD&#xff1a;合成到真实去雾框架的革新 一、PSD框架的提出背景二、PSD框架的原理与网络结构三、PSD框架的实现与代码示例四、结论与展望 在图像处理领域&#xff0c;去雾技术一直是一个备受关注的研究热点。然而&#xff0c;传统的去雾方法在面对真实世界的模糊图像时&a…

腐烂的橘子

代码实现&#xff1a; int orangesRotting(int **grid, int gridRowSize, int *gridColSizes) {int good 0, bad 0, t 0;for (int i 0; i < gridRowSize; i) {for (int j 0; j < gridColSizes[0]; j) {if (grid[i][j] 1) { // 记录好橘子数good;} else if (grid[i…

ABB机器人程序类型介绍

ABB机器人编程语言为rapid语言&#xff0c;在例行程序中可分为三类&#xff1a;普通程序、功能程序和中断程序。例如新建一个例行程序&#xff0c;会选择一个程序类型&#xff0c;三种类型的区别如下&#xff1a; 1、普通程序&#xff08;procedures&#xff09;&#xff1a;常…

代码大师的工具箱:现代软件开发利器

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Ubuntu 超级终端Terminator常用使用技巧

Ubuntu 超级终端Terminator常用使用技巧 Terminator 是一款功能强大的终端模拟器&#xff0c;它特别适合于需要同时管理多个终端会话的用户。以下是如何在 Ubuntu 上使用 Terminator 的详细指南&#xff1a; 安装 Terminator 如果你的系统尚未安装 Terminator&#xff0c;你…

anaconda 环境配置

官方网站下载地址&#xff1a; https://www.anaconda.com/download/ 国内清华镜像下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 配置国内环境: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ …

人工智能生成图像的兴起:区分事实与虚构

人工智能生成图像的兴起&#xff1a;区分事实与虚构 概述 在人工智能 (AI) 已融入我们日常生活的时代&#xff0c;人工智能生成图像的快速发展引发了人们对数字内容真实性的担忧。最近&#xff0c;人工智能生成的图像甚至欺骗了最敏锐的眼睛&#xff0c;这引发了人们对批判性…

什么是抽样调查

抽样调查是政府统计工作和市场调查中普遍采用的方法&#xff0c;我国《统计法》中明确规定&#xff1a;搜集、整理统计资料&#xff0c;应当以周期性普查为基础&#xff0c;以经常性抽样调查为主体&#xff0c;综合运用全面调查、重点调查等方法&#xff0c;并充分利用行政记录…

黑盒测试中的边界值分析

黑盒测试是一种基于需求和规格的测试方法&#xff0c;它主要关注软件系统输出的正确性和完整性&#xff0c;而不考虑内部代码的实现方式。在黑盒测试中&#xff0c;边界值分析是一种重要的测试技术&#xff0c;它可以帮助测试人员有效地发现输入和输出的问题。本文将从什么是边…

探索未知:风靡硅谷开发者的 Unstructured Data Meetup 即将登陆中国

“最硅谷”的 Unstructured Data Meetup 即将来袭&#xff01; 众所周知&#xff0c;AI 三要素包括&#xff1a;算力、算法和数据。数据的价值愈发凸显&#xff0c;而其中非结构化数据更是备受关注。IDC 预测&#xff0c;到 2025 年&#xff0c;全球数据总量中将有超过 80% 的数…