第十六届蓝桥杯大赛软件赛省赛 C++ 大学 B 组 部分题解

news2025/4/19 15:08:08

赛时参加的是Python组,这是赛后写的题解,还有两题暂时还不会,待更新

题目链接题目列表 - 洛谷 | 计算机科学教育新生态

A 移动距离

答案:1576

C  可分解的正整数

Python3
 

import itertools
from functools import cmp_to_key

import sys

input = sys.stdin.readline
sys.set_int_max_str_digits(100000)


def I():
    return input().strip()


def II():
    return int(I())


def MII():
    return map(int, I().split())


def LMII():
    return list(MII())


def solve():
    n = II()
    data = LMII()
    res = 0
    for x in data:
        if x != 1:
            res += 1
    print(res)


T = 1
for _ in range(T):
    solve()

C++

#include"iostream"
using namespace std;

int main() {
	int n = 0, x, res = 0;
	cin >> n;
	for (int i = 0;i < n;i++) {
		cin >> x;
		if (x != 1)res++;
	}
	cout << res;
}

D 产值调整

Python3

import itertools
from functools import cmp_to_key

import sys

input = sys.stdin.readline
sys.set_int_max_str_digits(100000)


def I():
    return input().strip()


def II():
    return int(I())


def MII():
    return map(int, I().split())


def LMII():
    return list(MII())


def solve():
    t = II()
    for i in range(t):
        a, b, c, k = MII()
        for j in range(k):
            if a == b == c:
                break
            a, b, c = (b + c) // 2, (a + c) // 2, (a + b) // 2
        print(a, b, c)


T = 1
for _ in range(T):
    solve()

C++

#include"iostream"
using namespace std;

int main() {
	int t;
	cin >> t;
	for (int i = 0;i < t;i++) {
		int a, b, c, k;
		cin >> a >> b >> c >> k;
		for (int j = 0;j < k;j++) {
			if (a == b && b == c)break;
			int aa = (b + c) / 2;
			int bb = (a + c) / 2;
			int cc = (a + b) / 2;
			a = aa;
			b = bb;
			c = cc;
		}
		cout << a << " " << b << " " << c << endl;
	}
}

E 画展布置

Python3

import itertools
from functools import cmp_to_key

import sys

input = sys.stdin.readline
sys.set_int_max_str_digits(100000)


def I():
    return input().strip()


def II():
    return int(I())


def MII():
    return map(int, I().split())


def LMII():
    return list(MII())


def solve():
    n, m = MII()
    data = LMII()
    data.sort()
    tmp = [0] * (n - 1)
    for i in range(n - 1):
        tmp[i] = data[i + 1] ** 2 - data[i] ** 2
    res = 0
    for i in range(m - 1):
        res += tmp[i]
    idx = 0
    now = res
    for i in range(m - 1, n - 1):
        now = now + tmp[i] - tmp[idx]
        res = min(res, now)
        idx += 1
    print(res)


T = 1
for _ in range(T):
    solve()

C++

#include"iostream"
#include"math.h"
#include"algorithm"
#include"vector"
using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	vector<int> data;
	for (int i = 0;i < n;i++) {
		int x;
		cin >> x;
		data.push_back(x);
	}
	sort(data.begin(), data.end());
	int tmp[100005] = { 0 };
	for (int i = 0;i < n - 1;i++)tmp[i] = pow(data[i + 1], 2) - pow(data[i], 2);
	long long res = 0;
	for (int i = 0;i < m - 1;i++)res += tmp[i];
	int idx = 0;
	long long now = res;
	for (int i = m - 1;i < n - 1;i++) {
		now = now + tmp[i] - tmp[idx];
		res = min(res, now);
		idx++;
	}
	cout << res << endl;
}

F 水质检测

Python3

import itertools
from functools import cmp_to_key

import sys

input = sys.stdin.readline
sys.set_int_max_str_digits(100000)


def I():
    return input().strip()


def II():
    return int(I())


def MII():
    return map(int, I().split())


def LMII():
    return list(MII())


def solve():
    s1 = I()
    s2 = I()
    st = -1
    en = 0
    for i in range(len(s1)):
        if s1[i] == "#" or s2[i] == "#":
            if st == -1:
                st = i
            else:
                en = i
    # print(st, en)
    if st == -1 or en == 0:
        print(0)
    else:
        res = 0
        tmp = 0
        for i in range(st, en + 1):
            # print(tmp,s1[i],s2[i])
            if s1[i] == s2[i] == '.':
                res += 1
            elif s1[i] == '.':
                if tmp == 1:
                    res += 1
                    tmp = 0
                else:
                    tmp = 2
            elif s2[i] == ".":
                if tmp == 2:
                    res += 1
                    tmp = 0
                else:
                    tmp = 1
            else:
                tmp = 0
            # print(i, res)
        print(res)


T = 1
for _ in range(T):
    solve()

C++

#include"iostream"
#include"math.h"
#include"algorithm"
#include"vector"
#include"string"
using namespace std;

int main() {
	string s1;
	string s2;
	cin >> s1;
	cin >> s2;
	int st = -1;
	int en = 0;
	for (int i = 0;i < s1.size();i++) {
		if (s1[i] == '#' || s2[i] == '#') {
			if (st == -1)st = i;
			else en = i;
		}
	}
	if (st == -1 || en == 0)cout << 0;
	else {
		int res = 0;
		int tmp = 0;
		for (int i = st;i < en + 1;i++) {
			if (s1[i] == '.' && s2[i] == '.') {
				res++;
			}
			else if (s1[i] == '.') {
				if (tmp == 1) {
					res++;
					tmp = 0;
				}
				else tmp = 2;
			}
			else if (s2[i] == '.') {
				if (tmp == 2) {
					res++;
					tmp = 0;
				}
				else tmp = 1;
			}
			else tmp = 0;
		}
		cout << res;
	}
}

G 生产车间

Python3

import itertools
from functools import cmp_to_key

import sys

input = sys.stdin.readline
sys.set_int_max_str_digits(100000)


def I():
    return input().strip()


def II():
    return int(I())


def MII():
    return map(int, I().split())


def LMII():
    return list(MII())


def solve():
    n = II()
    data = LMII()
    dic = {}
    for i in range(n - 1):
        u, v = MII()
        dic[u] = dic.get(u, []) + [v]
        dic[v] = dic.get(v, []) + [u]

    visited = [0] * (n + 1)
    lst = [[1]]
    now_visit = [1]
    visited[1] = 1
    father = {}
    son = {}
    while now_visit:
        next_visit = []
        for x in now_visit:
            for xx in dic[x]:
                if not visited[xx]:
                    father[xx] = x
                    son[x] = son.get(x, []) + [xx]
                    next_visit.append(xx)
                    visited[xx] = 1
        if next_visit:
            lst.append(next_visit)
        now_visit = next_visit
    lst.reverse()

    res = [set() for _ in range(n)]
    for i in range(1, n + 1):
        if i not in son:
            res[i - 1].add(data[i - 1])
    # print(res)
    # print(lst)
    # print(father)
    # print(son)

    def fun(lst, x):
        """
        lst: 一个列表,列表中每个元素都是一个可迭代的集合(或列表),
             表示“这一组”可供选择的数字。
        x: 目标上界(小于等于 x)
        返回: 一个集合 ans,包含所有可能的选数总和(<= x)。
        """
        # 初始只能选空集,总和为 0
        ans = {0}

        # 对每一组可选数字,更新所有可能的总和
        for group in lst:
            new_ans = set(ans)  # 保留“都不选任何数”的那部分
            for s in ans:  # 对已有的每一种“已选总和”
                for num in group:
                    tot = s + num
                    if tot <= x:
                        new_ans.add(tot)
            ans = new_ans
        ans.remove(0)
        return ans

    handle = [0] * (n + 1)
    for x in lst[:-1]:
        for xx in x:
            if not handle[xx]:
                tmp = father[xx]
                need_handle = []
                for y in son[tmp]:
                    handle[y] = 1
                    need_handle.append(res[y - 1])

                # print(need_handle)
                res[tmp - 1] |= fun(need_handle, data[tmp - 1])
                # print(tmp, res[tmp - 1])

    if not res[0]:
        print(0)
    else:
        print(max(res[0]))


T = 1
for _ in range(T):
    solve()

C++

#include"iostream"
#include"math.h"
#include"algorithm"
#include"vector"
#include"string"
#include"unordered_map"
#include"unordered_set"
#include"set"
using namespace std;

unordered_set<int> fun(const vector<unordered_set<int>>& lst, int x) {
	unordered_set<int> ans = { 0 };
	for (const auto& group : lst) {
		unordered_set<int> new_ans;
		for (int s : ans) {
			new_ans.insert(s);  // 记得保留原来的情况(不选当前组)
			for (int num : group) {
				int tot = s + num;
				if (tot <= x) new_ans.insert(tot);
			}
		}
		ans = std::move(new_ans);
	}
	ans.erase(0);
	return ans;
}

int main() {
	int n;
	cin >> n;
	vector<int> data;
	for (int i = 0;i < n;i++) {
		int x;
		cin >> x;
		data.push_back(x);
	}
	unordered_map<int, vector<int>> m;
	for (int i = 0;i < n - 1;i++) {
		int u, v;
		cin >> u >> v;
		m[u].push_back(v);
		m[v].push_back(u);
	}

	vector<int> visited(n + 1, 0);
	vector<vector<int>> lst = { {1} };
	vector<int> now_visit = { 1 };
	visited[1] = 1;
	unordered_map<int, int> father;
	unordered_map<int, vector<int>> son;
	while (!now_visit.empty()) {
		vector<int> next_visit;
		for (auto x : now_visit) {
			for (auto xx : m[x]) {
				if (!visited[xx]) {
					father[xx] = x;
					son[x].push_back(xx);
					next_visit.push_back(xx);
					visited[xx] = 1;
				}
			}
		}
		if (!next_visit.empty()) {
			lst.push_back(next_visit);
		}
		now_visit = next_visit;
	}
	reverse(lst.begin(), lst.end());

	vector<unordered_set<int>> res(n);
	for (int i = 1;i < n + 1;i++) {
		if (son.find(i) == son.end()) {
			res[i - 1].insert(data[i - 1]);
		}
	}

	vector<int> handle(n + 1, 0);
	for (int i = 0; i < (int)lst.size() - 1; i++) {
		for (auto x : lst[i]) {
			if (!handle[x]) {
				int tmp = father[x];
				vector<unordered_set<int>> need_handle;
				for (auto y : son[tmp]) {
					handle[y] = 1;
					need_handle.push_back(res[y - 1]);
				}
				unordered_set<int> merged = fun(need_handle, data[tmp - 1]);
				for (int val : merged) {
					res[tmp - 1].insert(val);
				}
			}
		}
	}

	if (res[0].empty()) {
		cout << 0 << endl;
	}
	else {
		int ans = 0;
		for (auto a : res[0]) {
			if (a > ans)ans = a;
		}
		cout << ans << endl;
	}
}

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

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

相关文章

英文查重的时候参考文献显示重复是怎么回事?

像上图这样参考文献部分有颜色的情况&#xff0c;是属于参考文献没有排除干净的问题。 如何解决这样的问题&#xff1f; 首先第一步&#xff0c;先确认该报告是不是排除参考文献的版本&#xff1b; 第二步&#xff0c;如果是排除参考文献的版本&#xff0c;且参考文献仍然有…

八股文---MySQl(3)

目录 12.事务的特性是什么&#xff1f;可以详细说一下吗&#xff1f; 回答 13并发事务带来哪些问题&#xff1f;怎么解决这些问题呢&#xff1f;MySQL的默认隔离级别是&#xff1f; 脏读&#xff1a;一个事务读到另外一个事务还没有提交的数据。 不可重复读&#xff1a;一个…

基于labview的钢琴程序设计

部分程序如下 按照上图子vi更改输出频率即可 若需完整程序可以联系我

基于CNN+ViT的蔬果图像分类实验

本文只是做一个简单融合的实验&#xff0c;没有任何新颖&#xff0c;大家看看就行了。 1.数据集 本文所采用的数据集为Fruit-360 果蔬图像数据集&#xff0c;该数据集由 Horea Mureșan 等人整理并发布于 GitHub&#xff08;项目地址&#xff1a;Horea94/Fruit-Images-Datase…

【虚幻C++笔记】接口

目录 概述创建接口 概述 简单的说&#xff0c;接口提供一组公共的方法&#xff0c;不同的对象中继承这些方法后可以有不同的具体实现。任何使用接口的类都必须实现这些接口。实现解耦解决多继承的问题 创建接口 // Fill out your copyright notice in the Description page o…

【MCP】第一篇:MCP协议深度解析——大模型时代的“神经连接层“架构揭秘

【MCP】第一篇&#xff1a;MCP协议深度解析——大模型时代的"神经连接层"架构揭秘 一、什么是MCP&#xff1f;二、为什么需要MCP&#xff1f;三、MCP的架构四、MCP与AI交互的原理4.1 ReAct&#xff08;Reasoning Acting&#xff09;模式4.2 Function Calling 模式 五…

实时模式下 libaom 与 x264 编码对比实验

前沿 理论基础&#xff1a;在相同视频质量下&#xff0c;AV1的压缩率比H.264高约30%-50%。实时模式&#xff1a;视频编码中的实时模式&#xff0c;其核心目标是平衡编码效率与延迟要求&#xff0c;尤其在视频会议、直播、实时通信等场景中至关重要。 低延迟要求&#xff1a;编…

学习海康VisionMaster之矩形检测

这几天太忙了&#xff0c;好几天没有学习了&#xff0c;今天终于空下来了&#xff0c;继续学习之路吧。 一&#xff1a;进一步学习了 今天学习下VisionMaster中的矩形检测&#xff0c;这个一开始我以为是形态学方面的检测&#xff0c;实际操作下来其实还是边缘直线的衍生应用&…

C Primer Plus 第6版 编程练习——第3章

1、通过试验&#xff08;即编写带有此类问题的程序&#xff09;观察系统如何处理整数上道、浮占数上溢和浮点数下溢的 int main(int argc, char** argv) {int intMax 2147483647;float floatMax 3.402823466e38f;float floatMin -3.402823466e38f;printf("intMax:%d, …

十倍开发效率 - IDEA插件之 Mybatis Log Free

提高效率不是为了完成更多任务&#xff0c;而是为了有充足的时间摸鱼 快速体验 MyBatis Log Free 支持打印执行的 SQL&#xff08;完整的SQL&#xff0c;没有占位符的&#xff09;。 没有使用 MyBatis Log Free 的开启日志打印是这样的&#xff1a; 用了 MyBatis Log Free 后…

手动安装 VMware Tools 并设置虚拟机共享 Windows 文件夹

前言&#xff1a;在当今数字化的工作环境中&#xff0c;虚拟机技术为我们提供了强大的灵活性和便利性。VMware 作为虚拟化领域的佼佼者&#xff0c;其虚拟机软件被广泛应用于开发、测试和日常工作中。然而&#xff0c;许多用户在使用 VMware 虚拟机时&#xff0c;会遇到一个常见…

(免费)flask调用讯飞星火AI,实现websocket

本文章可借鉴学习&#xff0c;不可直接盗用 接入ai要获取ID&#xff0c;Secret&#xff0c;Key&#xff0c;和接口地址&#xff0c;由于我们服务接口类型是websocket&#xff0c;所以要获取相应的接口地址。&#xff08;千万不要复制粘贴到http的了&#xff09; 还要获取doma…

2021-11-09 C++三位数平方含有该数

缘由求解&#xff0c;运算函数&#xff0c;哪位大神教一下-编程语言-CSDN问答 void 三位数平方含有该数() {//缘由https://ask.csdn.net/questions/7560152?spm1005.2025.3001.5141int a 100, aa 1000, f 0;while (a < aa){f a*a;while (f > a)if ((f - a) % aa)f …

StarRocks Community Monthly Newsletter (Mar)

版本动态 3.4.1 版本更新 核心功能升级 数据安全与权限管控 支持「安全视图」功能&#xff0c;严格管控视图查询权限 MySQL协议连接支持SSL认证&#xff0c;保障数据传输安全 存算分离架构增强 支持自动创建Snapshot&#xff08;集群恢复更便捷&#xff09; Storage Volu…

Github 2FA(Two-Factor Authentication/两因素认证)

Github 2FA认证 多因素用户认证(Multi-Factor Authentication)&#xff0c;基本上各个大互联网平台&#xff0c;尤其是云平台厂商&#xff08;如&#xff1a;阿里云的MFA、华为云、腾讯云/QQ安全中心等&#xff09;都有启用了&#xff0c;Github算是搞得比较晚些了。 双因素身…

动态规划 -- 简单多状态dp,打家劫舍问题

1 按摩师 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 本题的意思简单理解就是&#xff0c;如果我们接受了第 i 个预约&#xff0c;那么第 i -1 个预约和第 i1 个预约我们都是无法接受的&#xff0c;只能至少间隔一个选择。 按照以前的经验&#xff0c;我们…

C++学习之游戏服务器开发⑤AOI业务逻辑

目录 1.项目进度回顾 2.完善整体架构 3.AOI网格思路 4.网络AOI数据结构 5.游戏世界类添加&#xff0c;删除和构造 6.AOI查找实现 7.GAMEROLE类结合AOI 8.登陆时发送ID和姓名 9.登陆时发送周围玩家位置 10.玩家上线完成 11.玩家下线处理 1.项目进度回顾 时间轮调度处理…

Python 实现日志备份守护进程

实训背景 假设你是一名运维工程师&#xff0c;需要为公司的监控系统开发一个简单的日志备份守护进程。该进程需满足以下需求&#xff1a; 后台运行&#xff1a;脱离终端&#xff0c;长期监控指定目录&#xff08;如 /var/log/app/&#xff09;中的日志文件。自动备份&#xf…

Electricity Market Optimization 探索系列(VII)- 直流潮流方程的推导及例题

本文参考书籍&#xff1a;电力经济与电力市场&#xff0c;甘德强&#xff0c;杨莉&#xff0c;冯冬涵 著 link \hspace{1.6em} 文章的结构如下&#xff1a;围绕电力传输系统中短线路的等值等效模型&#xff0c;从节点注入功率的角度和线路功率的角度分析电网中的潮流&#xff0…

路由过滤实验

实验拓扑以及要求 此实验总结 1.ip-prefix 拒绝192.168.4.1 32,这样写的话并不会匹配192.168.4.1 32,需要加上范围less-eq 32,也就是说,192.168.4.1 32只是规则的范围,匹配还是得写范围 2.router-policy适合用在边界路由器引入 filter-policy都可以用 配置IP 配置ospf,rip …