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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenHamrony 实战开发——LiteOS-M内核的中断管理

在程序运行过程中&#xff0c;当出现需要由CPU立即处理的事务时&#xff0c;CPU暂时中止当前程序的执行转而处理这个事务&#xff0c;这个过程叫做中断。当硬件产生中断时&#xff0c;通过中断号查找到其对应的中断处理程序&#xff0c;执行中断处理程序完成中断处理。 通过中…

FPGA OSD 方案,应用于XBOX游戏机收费等领域

FPGA方案&#xff0c;HDMI IN接收原始HDMI 信号&#xff0c;HDMI OUT输出叠加字符/图片后的HDMI信号 客户应用&#xff1a;XBOX游戏机收费 主要特性&#xff1a; 1.支持多分辨率格式显示 2.支持OSD 叠加多个图层 3.支持字体大小随意配置 4.支持字体格式随意配置 5.零延时&…

让墨水屏成为生产力工具,文石做对了什么

文 | 螳螂观察 作者 | 青玥 众所周知&#xff0c;如今&#xff0c;我们的生活中大部分时间都被“屏幕”占据&#xff0c;这一承载着交互与显示功能的介质&#xff0c;出现在我们的手机、平板、汽车等产品上&#xff0c;吞没着我们的工作与生活。 而屏幕的长时间使用势必会对…

【AIGC】Mac Intel 本地 LLM 部署经验汇总(CPU Only)

书接上文&#xff0c;在《【AIGC】本地部署 ollama(gguf) 与项目整合》章节的最后&#xff0c;我在 ollama 中部署 qwen1_5-14b-chat-q4_k_m.gguf 预量化模型&#xff0c;在非 Stream 模式下需要 89 秒才完成一轮问答&#xff0c;响应速度实在是太慢&#xff0c;后续需要想办法…

数据库面试总结

数据库相关 mysql使用的函数 字符相关: concant() 连接字符 trim()去除字符的首尾空格 space(n) 返回n个空格 char_length() 返回字符的个数 ucase()/upper()将字符串 s 的所有字母变成大写字母 lcase()/lower() 将字符串 s 的所有字母变成小写字母 substr/substring/mid(s, …

到底考不考CISP?纠结的看过来

专业认证如CISP&#xff08;注册信息安全专业人员&#xff09;成为了衡量专业水平的重要标准。 CISP的含金量懂的都懂&#xff0c;然而&#xff0c;是否要投入时间、精力和金钱去追求这样一个认证&#xff0c;对于许多人来说&#xff0c;依然是一个值得深思的问题。 那么到底…

PyQt5中的Text Browser常用方法和常用信号

文章目录 1. 简介1.1. 常用方法&#xff1a;1.2 常用信号&#xff1a; 2. Text Browser常用方法使用案例3. Text Browser常用信号使用案例 1. 简介 PyQt5中的QTextBrowser类用于显示富文本内容&#xff0c;并支持与用户交互。以下是一些常用的方法和信号&#xff1a; 1.1. 常…

Vulnhub-wp 获取vulnhub靶机wp搜索工具

项目地址:https://github.com/MartinxMax/vulnhub-wp 简介 搜索Vulnhub平台的解题文章,之过滤返回出正确可访问的页面 使用 $ python3 vulnhubwp.py 支持模糊搜索 [] Query: kiop 进入选项4,获取wp地址 [] Choice options: 4

DML之操作数据表

1. 插入数据 (1). 前言 前文我们实现了如果创建表&#xff0c;接下来我们将学习如何向数据表中插入数据.插入有两种方式. (2). 方式1 : 情况1 : 使用该语法一次只能向表中插入一条记录.为表中的任意字段按默认的顺序插入数据.值列表中需要为表的每一个字段指定值.并且值…

springboot 整合阿里云短信服务

官方sdk示例地址 依赖引入 <!-- https://mvnrepository.com/artifact/com.aliyun/dysmsapi20170525 --><dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.23</version><…

跟TED演讲学英文:How the US is destroying young people‘s future by Scott Galloway

How the US is destroying young people’s future Link: https://www.ted.com/talks/scott_galloway_how_the_us_is_destroying_young_people_s_future? Speaker: Scott Galloway Date: April 2024 文章目录 How the US is destroying young peoples futureIntroductionVoc…

Java中PriorityQueue的用途和性能深度剖析

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

大势已至,智慧广西 | 大势智慧到往广西自然资源厅下属多家事业单位汇报交流

5月9-10日&#xff0c;武汉大势智慧科技有限公司&#xff08;后简称“大势智慧”&#xff09;CEO黄先锋一行先后到往广西壮族自治区地理信息测绘院&#xff08;后简称“地测院”&#xff09;、广西壮族自治区地图院&#xff08;后简称“地图院”&#xff09;、广西壮族自治区自…

组合模式(结构型)

目录 一、前言 二、透明组合模式 三、安全组合模式 四、总结 一、前言 组合模式(Composite Pattern)是一种结构型设计模式&#xff0c;将对象组合成树形结构以表示“部分-整体”得层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式由以下角色组成…

Jmeter内存溢出原因及解决办法

现在越来越多的小伙伴在压力测试过程中选择使用Jmeter&#xff0c;原因是这个工具开源且小巧&#xff0c;而且还支持二次开发。 但是事情都有两面性&#xff0c;利弊共存啊&#xff0c;对比商业软件Loadrunner&#xff0c;Jmeter在高并发&#xff0c;特别是大型项目的高并发&a…

将macOS系统安装到外置硬盘上教程

常常因为Mac昂贵的价格&#xff0c;我们会选择低容量的硬盘版本&#xff0c;造成很多大型游戏都安装不了的尴尬境地。今天&#xff0c;我们要探讨一个非常实用的话题&#xff1a;如何给你的Mac电脑扩容&#xff0c;通过将macOS系统安装到外置硬盘上。这对于希望提升存储空间但又…

计算机组成原理(超详解!!) 第七节 中央处理器(下)

1.微程序控制器 微程序设计技术&#xff1a;利用软件方法来设计硬件的一门技术。 微程序控制器的基本思想&#xff1a; 仿照通常的解题程序的方法&#xff0c;把操作控制信号编成所谓的“微指令”&#xff0c;存放到一个只读存储器里。当机器运行时&#xff0c;一条又一条地…

安全测试工具BurpSuite安装和使用

1.安装 下载地址&#xff1a;https://pan.baidu.com/s/1YJbZGAfVKLsQmNeZYZXEeQ 提取码: yyds 打开cmd&#xff0c;运行以下指令&#xff0c;打开keygen界面&#xff1a; java -jar "C:\soft\BurpSuite v2.1\burp-loader-keygen-2.jar" 点击Run按钮&#xff0c;弹…

5月13号作业

使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式&#xff1a; 当键盘按ctrlc的时候&#xff0c;切换消息读取方式&#xff0c;一般情况为读取指定编号的消息&#xff0c;按ctrlc之后&#xff0c;指定的编号不读取&#xff0c;读取其他所有编号的消息…

标准输入输出流(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 输入三角形的三边a,b,c&#xff0c;计算三角形的面积。形成三角形的条件是ab>c,bc>a,ac>b&#xff0c;编写程序&#xff0c;输入a,b,c&#xff0c;检查a,b,c是否满足以上条件&#xff0c;如不满足&#xff0c;由cerr输出有关出错信息…