当前位置:首页 > 技术 > 正文内容

2025蓝桥杯C++国赛A组题目解析

访客 技术 2026年6月11日 1

蓝桥杯这次表现不佳,决定认真复盘一下未完成的题目。

目录- C. 土地平整方案

  • 题目描述
  • 思路分析
  • D. 生日同星期问题
  • 题目描述
  • 思路分析
  • E. 树形结构
  • F. 连锁影响

C. 土地平整方案

题目描述

给定一个数组a。如果某个位置a_i左侧所有元素都与其不同,可以将左侧全部元素修改为a_i,消耗代价为a_i;对右侧同理操作。此外,如果存在a_i = a_j,且它们之间的所有元素都与该值不同,可以将中间区间全部改为a_i,消耗同样为a_i。每个位置至多被修改一次。求使整个数组变为相同元素的最小代价。

思路分析

由于每个位置只能修改一次,修改方案实际上是唯一的:选取数组中已存在的某个值作为目标,整个数组中所有与该值不相等的连续段数量乘以该值即为对应答案。

#include <bits/stdc++.h>
#define int long long
constexpr int MAXV = 1000005;
constexpr int INFW = (int)2e16;

int n, arr[MAXV], freq[MAXV];
bool exist[MAXV];

void solve() {
    std::cin >> n;
    int val, uniq = 0;
    for (int i = 1; i <= n; i++) {
        std::cin >> val;
        if (val != arr[uniq]) arr[++uniq] = val;
    }
    if (uniq == 1) {
        std::cout << "0\n";
        return;
    }
    for (int i = 1; i <= uniq; i++) {
        freq[arr[i]]++;
        exist[arr[i]] = true;
    }
    freq[arr[1]]--;
    freq[arr[uniq]]--;
    int result = INFW;
    for (int i = 1; i <= (int)1e6; i++) {
        if (!exist[i]) continue;
        result = std::min(result, i * (freq[i] + 1));
    }
    std::cout << result << "\n";
}

D. 生日同星期问题

题目描述

已知两个人的生日分别为m1月d1日和m2月d2日。从2025年开始,连续k年内,找出哪些年份这两人落在同一星期几。

思路分析

k的范围仅为50,直接模拟即可。首先将2月29日转换为2月28日并记录标记:若是闰年,则将该人员生日延后一天处理,处理完后立即恢复。接着将生日划分为1月1日至2月28日和3月1日至12月31日两部分分别计算,逐一判断即可。

#include <bits/stdc++.h>
#define int long long
constexpr int MAXV = 1000005;
constexpr int INFW = (int)2e16;

int k, m1, d1, m2, d2;
int cumDays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool isLeap(int year) {
    return (year % 100 == 0) ? (year % 400 == 0) : (year % 4 == 0);
}

void solve() {
    std::cin >> m1 >> d1 >> m2 >> d2 >> k;
    for (int i = 2; i <= 12; i++) cumDays[i] += cumDays[i - 1];
    int pos1 = cumDays[m1 - 1] + d1;
    int pos2 = cumDays[m2 - 1] + d2;
    int year = 2025;
    bool tag1 = false, tag2 = false, found = false;
    if (m1 == 2 && d1 == 29) pos1--, tag1 = true;
    if (m2 == 2 && d2 == 29) pos2--, tag2 = true;
    while (k--) {
        bool leap = isLeap(year);
        if (leap) {
            if (m1 > 2) pos1++;
            if (m2 > 2) pos2++;
            pos1 += tag1;
            pos2 += tag2;
        }
        if (std::abs(pos1 - pos2) % 7 == 0) {
            std::cout << year << "\n";
            found = true;
        }
        if (leap) {
            if (m1 > 2) pos1--;
            if (m2 > 2) pos2--;
            pos1 -= tag1;
            pos2 -= tag2;
        }
        year++;
    }
    if (!found) std::cout << "No Answer\n";
}

E. 树形结构

待补充

F. 连锁影响

待补充

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。