第十四届蓝桥杯省赛C++ C组所有题目以及题解(C++)【编程题均通过100%测试数据】

news2024/7/4 6:04:07

第一题《求和》【简单模拟】

【问题描述】

求1(含)至20230408(含)中每个数的和。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

#include <iostream>
using namespace std;
int main()
{
  long long res = 0;
  for(int i = 1;i<=20230408;i++) res += i;
  printf("%lld",res);
  // 请在此输入您的代码
  return 0;
}

【答案】

204634714038436


第二题《工作时长》【模拟】

【问题描述】

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【代码】

#include <bits/stdc++.h>
using namespace std;

//2022是平年
int Month[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};

int sum[520];
int month, day, h, mi, s; //月,日,时,分,秒

int main() {
  int ans = 0;
    for (int i = 0; i < 520; i++) {
        string str;
        getline(cin, str);
        month = (str[6] - '0') + (str[5] - '0') * 10;
        day = (str[9] - '0') + (str[8] - '0') * 10;
        h = (str[12] - '0') + (str[11] - '0') * 10;
        mi = (str[15] - '0') + (str[14] - '0') * 10;
        s = (str[18] - '0') + (str[17] - '0') * 10;
        sum[i] = (Month[month - 1] + day) * 86400 + h * 3600 + mi * 60 + s;
    }
    sort(sum, sum + 520);
    for (int i = 0; i < 520; i += 2) {
        ans += sum[i + 1] - sum[i];
    }
    cout << ans << endl;
    return 0;
}

【答案】

5101913


第三题《三国游戏》【贪心】

本题题解参考这篇博客:【贪心】第十四届蓝桥杯省赛C++ / Java / Python C组《三国游戏》(C++) 


 第四题《填充》【贪心】

本题题解参考这篇博客:【贪心】第十四届蓝桥杯省赛C++ / Java / Python C组《填充》(C++)


第五题 《翻转》【思维】

本题题解参考这篇博客:【思维】第十四届蓝桥杯省赛C++ C组/研究生组 Python A组/C组《翻转》(C++)


第六题《子矩阵》【单调队列】

本题题解参考这篇博客:【单调队列】第十四届蓝桥杯省赛C++ C组 Java C组/研究生组 Python A组《子矩阵》(C++)


第七题《互质数的个数》【欧拉函数+快速幂】

本题题解参考这篇博客:【欧拉函数+快速幂】第十四届蓝桥杯省赛C++ C组 Java A组/研究生组 Python 研究生组《互质数的个数》(C++)


第八题《异或和之差》【trie树】 

【题目描述】

给定一个含有 n 个元素的数组 A_{i},你可以选择两个不相交的子段。

求出这两个子段内的数的异或和的差值的最大值。

【输入格式】

输入的第一行包含一个整数 n。

第二行包含 n 个整数 A_{i},相邻整数之间使用一个空格分隔。

【输出格式】

输出一行包含一个整数表示答案。

【数据范围】

对于 40% 的评测用例,n ≤ 5000;
对于所有评测用例,2 ≤ n ≤ 2×10^{5},0 ≤ A_{i} ≤ 2^{20}

【输入样例】

6
1 2 4 9 2 7

【输出样例】

14

【样例解释】

两个子段可以分别选 1 和 4,9,2,差值为 15−1=14。

【思路】 

求异或最值,一般用trie树做。

trie树可以在len(num)的时间内求出与num异或最大/最小的值
题目求的是区间,我们可以维护一个前缀异或和sum[i],那么我们求一段异或和最大,也就是求前缀和中的与sum[i]异或最大的值,最小同理,

题目求的是两段区间的差值最大,因为两段区间不相交,我们可以先求出前缀的最大/最小值,后缀在求一遍,答案就是前缀最大值-后缀最小值 or 后缀最大值-前缀最小值

【代码】

#include <bits/stdc++.h>

using namespace std ;
typedef long long LL ;
typedef pair<LL,int> PLI ; 
const int N = 1e6 + 10 ; 

int  n , a[N] ; 
int son[2][N] , idx ; 
int mx[N] , mi[N] ;

void insert(int x)
{
    int p = 0 ; 
    for(int i = 20 ; i >= 0 ; i --)
    {
        int u = (x >> i) & 1 ; 
        if(!son[u][p]) son[u][p] = ++ idx ; 
        p = son[u][p] ; 
    }
}

int query_mi(int x)
{
    int p = 0 , res = 0;
    for(int i = 20 ; i >= 0 ; i --)
    {
        int u = (x >> i) & 1 ; 
        if(!son[u][p])
        {
            u = !u ; 
            res |= (1 << i) ; 
        }
        p = son[u][p] ;
    }
    return res ; 
}
int query_mx(int x)
{
    int p = 0 , res = 0;
    for(int i = 20 ; i >= 0 ; i --)
    {
        int u = (x >> i) & 1 ; 
        if(son[!u][p]) res |= (1 << i) ;
        else u = !u ;  

        p = son[!u][p] ; 
    }
    return res ; 
}


int main()
{
    cin >> n ;
    for(int i = 1 ; i <= n; i ++) cin >> a[i] ; 

    mx[0] = 0 , mi[0] = 2e9 ;
    int sum = 0 ;
    insert(sum) ; 
    for(int i = 1 ; i <= n ; i ++)
    {
        sum ^= a[i] ; 
        mx[i] = max(mx[i - 1] , query_mx(sum)) ;
        mi[i] = min(mi[i - 1] , query_mi(sum)) ; 
        insert(sum) ; 
    }

    memset(son , 0 , sizeof son) ; 
    idx = 0 ; sum = 0 ;

    int ans = 0 , mx2 = 0 , mi2 = 2e9; 
    insert(sum) ; 
    for(int i = n ; i ; i --)
    {
        sum ^= a[i] ; 
        mx2 = max(mx2 , query_mx(sum)) ; 
        mi2 = min(mi2 , query_mi(sum)) ; 

        ans = max({ans , mx[i - 1] - mi2 , mx2 - mi[i - 1]}) ; 
        insert(sum) ; 
    }

    cout << ans << endl ;
    return 0 ;
}

第九题《公因数匹配》【质因数分解】 

【题目描述】

给定 n 个正整数 A_{i},请找出两个数 i,j 使得 i<j 且 A_{i} 和 A_{j} 存在大于 1 的公因数。

如果存在多组 i,j,请输出 i 最小的那组。

如果仍然存在多组 i,j,请输出 i 最小的所有方案中 j 最小的那组。

【输入格式】

输入的第一行包含一个整数 n。

第二行包含 n 个整数分别表示 A_{1},A_{2},⋅⋅⋅,A_{n},相邻整数之间使用一个空格分隔。

【输出格式】

输出一行包含两个整数分别表示题目要求的 i,j,用一个空格分隔。

由于官方没有提及无解时如何进行输出,所以本题目前保证有解。

【数据范围】

对于 40% 的评测用例,n≤5000;
对于所有评测用例,1≤n≤10^{5},1≤Ai≤10^{6}

【输入样例】

5
5 3 2 6 9

【输出样例】

2 4

【代码】

#include <iostream>
#include <algorithm>
#include <vector>
#define x first // 宏定义,方便使用pair中的两个元素
#define y second
using namespace std;
typedef pair<int, int> PII; // 定义pair类型,用于存放下标
const int N = 1e6 + 10;
int n;
int a[N]; // a数组用于存放每个质因子在数列中最后一次出现的位置
vector<PII> v; // 存放有重叠的两个数的下标
int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++)
    {
        int x;
        scanf("%d", &x);
        // 对x进行质因数分解
        for (int j = 2; j <= x / j; j ++)
        {
            if (x % j == 0)
            {
                // 如果j已经在数列中出现过了,说明有至少一个数和当前数在j这个质因子上有重叠
                if (a[j])   v.push_back({a[j], i}); 
                else    a[j] = i; // 否则将j在a数组中标记为当前数在数列中的下标
                while (x % j == 0)  x /= j; // 将j从x中除掉,以便下一个质因子的分解
            }
        }
        if (x > 1)  
        {
            // 如果x剩下了一个大于1的质因子,同上处理
            if (a[x])   v.push_back({a[x], i});
            else    a[x] = i;
        }
    }
    sort(v.begin(), v.end()); // 按照第一个元素(之前标记的下标)排序
    printf("%d %d", v[0].x, v[0].y); // 输出第一个元素即可
    return 0;
}

第十题《子树的大小》【模拟】 

【题目描述】

【输入格式】

输入包含多组询问。

输入的第一行包含一个整数 T,表示询问次数。

接下来 T 行,每行包含三个整数 n,m,k 表示一组询问。

【输出格式】

输出 T 行,每行包含一个整数表示对应询问的答案。

【数据范围】

对于 40% 的评测用例,T≤50,n≤10^{6},m≤16;
对于所有评测用例,1≤T≤10^{5},1≤k≤n≤10^{9},2≤m≤10^{9}

【输入样例】

3
1 2 1
11 3 4
74 5 3

【输出样例】

1

2

24

【思路】

题解来源:AcWing 4971. 子树的大小 - AcWing

【代码】

#include<iostream>
#include<cstring>
#include<algorithm>

#define int long long 
using namespace std;

typedef long long ll;

int n, m;
int k;
int sum;
signed main()
{
    int T;
    cin >> T;
    while(T --)
    {
        cin >> n >> m >> k;
        int t = 1;
        sum = 1;
        while(sum < k)
        {
            t *= m;
            sum += t;
        }
        int ans  = 0, p = 1;
        int l = k - (sum - t) - 1;
        while(sum < n)
        {
            ans += p;
            l = l * m;
            t *= m;
            p *= m;
            sum += t;
        }
        n -= sum - t;
        ans += min(p, max(0ll, n - l));
        cout << ans << endl;
    }
    return 0;
}

 以上内容部分题目题解摘自他人博客题解,在题目处均已标明出处。若有侵权,私信删除。

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

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

相关文章

brew install 命令详解

1. 前言 Homebrew 是一款 Mac OS 平台非常流行的软件包管理工具 通过一条简单的指令&#xff0c;就可以软件包管理&#xff0c;比如&#xff1a;安装、升级、更新等操作&#xff0c;这也是它这么流行的主要原因 2. 安装 安装软件命令格式 # 安装软件brew install <package…

css简单动画实现

html源码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>西安工程大学</title><link …

【解决方案】智慧路灯安全用电云平台解决方案

背景介绍 电力作为一种清洁能源&#xff0c;给人们带来了舒适、便捷的电气化生活。与此同时&#xff0c;由于使用不当&#xff0c;维护不及时等原因引发的漏电触电和电气火灾事故&#xff0c;也给人们的生命和财产带来了巨大的威胁和损失。 路灯漏电的主要原因分析&#xff1a…

【基于springboot分析Quartz(v2.3.2)的启动流程】

基于springboot分析Quartz&#xff08;v2.3.2&#xff09;的启动流程 最近公司的定时任务使用了Quartz框架&#xff0c;在开发中经常出现定任务不执行了的问题&#xff0c;但是我又找不到原因所在&#xff0c;可把我愁坏了。于是我决定看看Quartz框架是怎么调度任务的。&#x…

STM32 软件I2C方式读取AS5600磁编码器获取角度例程

STM32 软件I2C方式读取AS5600磁编码器获取角度例程 &#x1f516;本例程使用正点原子例程作为工程模板创建。 &#x1f4d8; 硬件电路部分 &#x1f33f;原理图部分&#xff1a; &#x1f33f;PCB布线和电路 &#x1f4d9;驱动代码部分 int main(void) {u16 i 0;u16 ra…

手动实现一个扩散模型DDPM

扩散模型是目前大部分AIGC生图模型的基座&#xff0c;其本质是用神经网络学习从高斯噪声逐步恢复图像的过程&#xff0c;本文用python代码从零开始构建了一个简单的扩散模型。 理论部分 DDPM(Denoising Diffusion Probabilistic Models) 是一种在生成对抗网络等技术的基础上发展…

【优选算法】双指针 -- 快乐数 和 盛最多水的容器

前言&#xff1a; &#x1f3af;个人博客&#xff1a;Dream_Chaser &#x1f388;刷题专栏&#xff1a;优选算法篇 &#x1f4da;本篇内容&#xff1a;03快乐数 和 04盛最多水的容器 目录 一、快乐数&#xff08;medium&#xff09; 1. 题⽬链接&#xff1a;202. 快乐数 2. …

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数&#xff0c;拷贝构造函数&#xff0c;析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

鸿蒙实战开发-使用属性动画实现自定义刷新组件

介绍 本篇Codelab主要介绍组件动画animation属性设置。当组件的某些通用属性变化时&#xff0c;可以通过属性动画实现渐变效果&#xff0c;提升用户体验。效果如图所示&#xff1a; 说明&#xff1a; 本Codelab使用的display接口处于mock阶段&#xff0c;在预览器上使用会显示…

element-ui switch 组件源码分享

今日简单分享 switch 组件源码&#xff0c;主要从以下四个方面来分享&#xff1a; 1、switch 组件的页面结构 2、switch 组件的属性 3、switch 组件的事件 4、switch 组件的方法 一、switch 组件的页面结构 二、switch 组件的属性 2.1 value / v-model 属性&#xff0c;绑…

基于Hive大数据分析springboot为后端以及vue为前端的的民宿系

标题基于Hive大数据分析springboot为后端以及vue为前端的的民宿系 本文介绍了如何利用Hive进行大数据分析,并结合Spring Boot和Vue构建了一个民宿管理系统。该民民宿管理系统包含用户和管理员登陆注册的功能,发布下架酒店信息,模糊搜索,酒店详情信息展示,收藏以及对收藏的…

SpringMVC源码分析(七)--数据绑定工厂

1.数据绑定工厂的使用 数据绑定工厂能够创建数据绑定器,将数据绑定到对象中,比如说当接收到请求时,经过http协议解析后数据刚开始都是字符串,此时我们希望将这些属性进行类型转换,并为对象赋值,示例如下: 1)先创建两个实体类Student和Teacher @Getter @Setter @ToSt…

封装性练习

练习 1 &#xff1a; 创建程序&#xff1a;在其中定义两个类&#xff1a; Person 和 PersonTest 类。定义如下&#xff1a; 用 setAge() 设置人的合法年龄 (0~130) &#xff0c;用 getAge() 返回人的年龄。在 PersonTest 类中实例化 Person 类的对象 b &#xff0c;调用 set…

Java八股文(算法)

Java八股文の算法 算法 算法 逆序输出字符串 题目描述&#xff1a;输入一个字符串&#xff0c;要求逆序输出。 public static String reverseString(String s) {StringBuilder sb new StringBuilder();for (int i s.length() - 1;i > 0;i--) {sb.append(s.charAt(i));}r…

基于多模态信息的语音处理(misp) 2023挑战:视听目标说话人提取

THE MULTIMODAL INFORMATION BASED SPEECH PROCESSING (MISP) 2023 CHALLENGE: AUDIO-VISUAL TARGET SPEAKER EXTRACTION 第二章 目标说话人提取之《基于多模态信息的语音处理(misp) 2023挑战:视听目标说话人提取》 文章目录 THE MULTIMODAL INFORMATION BASED SPEECH PROCESS…

MCU或者SOC常见驱动3:USART通信

MCU或者SOC常见驱动3&#xff1a;USART通信 本文目的前置知识点UART简介主要特性通信流程数据帧格式所有数据帧满足的格式特殊的帧和用处&#xff08;不是很清楚对不对&#xff09; 参考文献 本文目的 简单的介绍USART通信一下是什么&#xff0c;有什么用&#xff0c;以及相关…

鸿蒙OS开发实例:【窥探网络请求】

HarmonyOS 平台中使用网络请求&#xff0c;需要引入 "ohos.net.http", 并且需要在 module.json5 文件中申请网络权限, 即 “ohos.permission.INTERNET” 本篇文章将尝试使用 ohos.net.http 来实现网络请求 场景设定 WeiBo UniDemo HuaWei : 请求顺序WeiBo1 UniDem…

同元软控专业模型库系列——液压气动篇

01 引言 近年来&#xff0c;数字液压技术在工业领域的应用逐渐推广&#xff0c;为提升生产效率、降低能源消耗、实现智能化制造提供了新的可能性。数字液压技术的应用已经覆盖了工程机械、航空航天、能源设备等众多领域&#xff0c;具有巨大的发展潜力。 行业技术的发展融合在…

机器人码垛机:智能仓储系统的重要组成部分

随着科技的飞速进步&#xff0c;机器人技术已经渗透到了许多行业领域&#xff0c;其中&#xff0c;仓储业尤为显著。机器人码垛机作为智能仓储系统的重要组成部分&#xff0c;不仅提高了码垛效率&#xff0c;还降低了人工成本和安全风险。然而&#xff0c;在其广泛应用的同时&a…

C# OpenCvSharp-HoughCircles(霍夫圆检测) 简单计数

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using O…