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

news2024/11/26 10:31:19

文章目录

  • 前言
  • 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.coloradmin.cn/o/1671508.html

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

相关文章

Linux修炼之路之权限

目录 引言 一&#xff1a;Linux中用户的分类 二&#xff1a;在Linux中的权限 1.权限的两种属性 1.人的属性 2.事物属性 -主要以文件属性为主 3.文件权限值的两种表示方式方法 2.更改文件访问者(拥有者&#xff0c;所属组&#xff0c;其他人)权限属性 3.更改文件的拥有…

vue3专栏项目 -- 四、前后端结合(下)

一、async 和 await 1、使用async 和 await 改造异步请求 在接触后端API以后就遇到了越来越多的异步请求&#xff0c;现在我们就使用async 和 await 改造异步请求。 async function是把返回内容包裹成个Promise返回Promise await 它在async function里面才起作用&#xff0…

【全开源】JAVA上门家政服务系统源码微信小程序+微信公众号+APP+H5

功能介绍 用户端&#xff1a;精准分类、支持家政、维修、万能服务、一口价、报价、线上、各类家政服务、优惠专区、师傅入驻、商家入驻、我的需求、补费明细、我的投诉 师傅端&#xff1a;接单池、消息通知、接单管理、今日订单、师傅入驻、我的钱包、实名认证 商家端&#…

【排序算法】之希尔排序

一、算法介绍 希尔排序(Shell Sort)是插入排序的一种&#xff0c;它是针对直接插入排序算法的改进。希尔排序又称缩小增量排序&#xff0c;因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行&#xff0c;各趟比较所用的距离随着算法的进行而减小&#xf…

系统设计 —— 随用户扩展

单服务器设置&#xff1a; 在单服务器设置中&#xff0c;所有内容都运行在一台服务器上。这包括网页应用程序、数据库、缓存等。 1*HQXZgCc5Vh8KooJHwKfzjw.png 图1.1 请求流程 1.最终用户通过域名&#xff08;myurl.com&#xff09;访问网站。请求发送到 DNS&#xff0c;将域名…

字符串函数(一):strcpy(拷贝),strcat(追加),strcmp(比较),及strncpy,strncat,strncmp

字符串函数 一.strcpy&#xff08;字符串拷贝&#xff09;1.函数使用2.模拟实现 二.strcat&#xff08;字符串追加&#xff09;1.函数使用2.模拟实现 三.strcmp&#xff08;字符串比较&#xff09;1.函数使用2.模拟实现 四.strncpy1.函数使用2.模拟实现 五.strncat1.函数使用2.…

[Kubernetes] sealos 部署 K8s v1.25.0 集群

文章目录 1.sealos 介绍2.操作系统基础配置3.安装部署 K8s4.验证 K8s 集群5.部署测试资源 1.sealos 介绍 Sealos 是一个基于 Kubernetes 内核的云操作系统发行版。它采用云原生方式&#xff0c;摒弃传统的云计算架构&#xff0c;转向以 Kubernetes 为云内核的新架构。这使得企…

Python从0到POC编写--函数

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

安卓短视频一键搬运软件_V1.5.2 高级版

短视频一键搬运app是一款非常实用的视频处理软件&#xff0c;拥有各种各样的视频处理功能&#xff0c;可以帮助用户进行视频的多项处理&#xff0c;首先用户可以在这里为视频去除水印&#xff0c;打开视频文件过后&#xff0c;再把视频里面的水印内容框选出来&#xff0c;这样就…

从“金事通”带给我意想不到的来说--“数据是架构的中心”

背景 上周一个保险的销售人员来找我完成一定的售后流程。其中有一项是请我下载一个叫 金事通的 APP。说实在的我根本没听过。她说这是政治任务。我想不是有你们保险公司的APP了嘛。为什么还要我安装。没办法先安装吧。 经历了注册、人脸识别的步骤后。可以登录了。注册短信发…

Rx(Reactive Extensions)的由来

既然我们已经介绍了响应式编程&#xff0c;现在是时候了解我们的明星了:响应式扩展&#xff0c;通常简称为Rx。微软开发了Reactive扩展库&#xff0c;使其易于处理事件流和数据流。在某种程度上&#xff0c;时变值本身就是一个事件流;每个值更改都是一种类型的事件它会更新依赖…

交通地理信息系统实习教程(二)

这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置&#xff1a;【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置&#xff1a;【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…

快来参加【顶尖赛事】LIC·2024 语言与智能技术竞赛

语言与智能技术竞赛&#xff08;LIC&#xff09;是由中国中文信息学会&#xff08;CIPS&#xff09;和中国计算机学会&#xff08;CCF&#xff09;联合主办&#xff0c;百度公司、中国中文信息学会评测工作委员会和中国计算机学会自然语言处理专委会承办的中文NLP顶级赛事&…

qt移植到imx6ull运行(qt部署到imx6ull)

这个事情对于小白来说确实不是很友好&#xff0c;会经常出现错误&#xff0c;我弄了两天终于弄好了 我主要参考了https://blog.csdn.net/m0_61738650/article/details/131269561 https://blog.csdn.net/m0_61738650/article/details/131171914这两个教程 我现在来简述一下流程…

AI+新能源充电桩数据集

需要的同学私信联系&#xff0c;推荐关注上面图片右下角的订阅号平台 自取下载。 随着我国新能源汽车市场的蓬勃发展&#xff0c;充电桩的需求量日益增加&#xff0c;充电桩的智能化程度不仅影响充电站运营商的经营效益&#xff0c;也大大影响着用户的充电体验。AI技术可以涵盖…

深入浅出:ConcurrentLinkedQueue源码分析与实战

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

C++青少年简明教程:C++中的常量、变量、表达式和语句

C青少年简明教程&#xff1a;C中的常量、变量、表达式和语句 在C编程中&#xff0c;常量、变量、表达式和语句是基本的编程概念。 常量&#xff08;Constants&#xff09;&#xff1a;在程序中具有固定值的数据称为常量。常量可以是字面值&#xff0c;如整数、浮点数、字符或…

西门子博途WINCC动画之旋转运动

概述 本例将介绍在西门子 TIA Portal HMI 中旋转运动动画的一种实现方法。本例以风机、搅拌器和传送带为例&#xff0c;按下启动按钮开始转动&#xff0c;按下停止按钮停止转动。 第1步&#xff1a; 添加 PLC 设备。​博途TIA/WINCC社区VX群 ​博途TIA/WINCC社区VX群 选择西…

基于SpringBoot的酒店(预约)客房管理系统的设计与实现+毕业论文

系统介绍 酒店客房管理系统为酒店管理者和用户、清洁人员提供一个在线管理酒店客房的系统。在网站的设计中&#xff0c;一共分为了两个模块设计&#xff0c;一个是前台模块&#xff0c;一个是后台模块&#xff0c;前台主要用于提供查看客房信息&#xff0c;酒店资讯&#xff0…

iOS MRC那句话

混编时使用MRC文件需要使用这句话 -fno-objc-arc在下图中显示的位置添加