CCF-CSP真题《202305-5 闪耀巡航》思路+python,c++满分题解

news2024/12/23 23:43:16

 想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全

试题编号:202305-5
试题名称:闪耀巡航
时间限制:5.0s
内存限制:512.0MB
问题描述:

问题描述

西西艾弗岛旅游公司最近推出了一系列环绕西西艾弗岛的闪耀游轮航线。普通的航线通常是一条环线,以便乘客在漫长的旅途之后回到出发点;而闪耀航线则多为有惊无险的单程。因此,西西艾弗岛旅游公司也允许乘客自己选择一些能够返回起点的航线组合。具体而言,西西艾弗岛旅游公司推出的航线可以用仅包含小写字母的字符串表示,其中每一种字母代表航线中途经的一个目的地。例如,航线 aqua 表示从 a 出发,途经 q 和 u,最终返回 a 的航线。西西艾弗岛旅游公司目前运营着 N 条这样的航线,分别用字符串 s1,s2,⋯,sN 表示。我们定义,一条航线的长度为相应的字符串长度减 1,如航线 aqua 的长度为 3。

西西艾弗岛旅游公司为了鼓励乘客乘坐其游轮,推出了一项集章活动。乘坐其游轮途经部分目的地(可以是搭乘的航线的起点或终点)时,可以获得一枚印章。我们用字符串 t 表示所有参与集章活动的目的地。当乘客集齐 t 中所有字母对应的印章时,有机会抽取免费住宿豪华酒店等幸运大奖。

为了确定集章活动给公司带来的预期利润,西西艾弗岛旅游公司想知道:对于每条航线 si,从 si 的起点出发搭乘 si 到达 si 的终点,再经过多条航线(可以是 0 条)完成集章后返回 si 的起点,需要乘坐的航线组合的最小总长度。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 N 和一个字符串 t,保证 1≤N≤105,1≤|t|≤10,且 t 仅包含不重复的小写字母。

接下来 N 行,每行包含一个字符串 si,表示第 i 条航线。保证 2≤|si|≤106,∑i=1N|si|≤106。

输出格式

输出到标准输出中。

输出包含 N 行,每行输出一个正整数表示对应航线组合的最小总长度,或者输出 -1 表示不存在满足要求的航线组合。

样例输入

6 au
aqua
glass
hug
shiny
sparkling
youth

样例输出

3
14
14
14
26
14

样例输入

7 i
nonstop
perfect
rocket
thrilling
train
trapper
tripper

样例输出

16
16
11
-1
16
22
11

子任务

对于 10% 的数据,保证 1≤N≤10,1≤|t|≤5。

对于另外 10% 的数据,保证 1≤N≤1000,|t|=1。

对于另外 20% 的数据,保证 1≤|t|≤5。

对于 100% 的数据,保证 1≤N≤105,1≤|t|≤10,2≤|si|≤106,∑i=1N|si|≤106,si 和 t 仅包含小写字母,且 t 中字母不重复。

真题来源:闪耀巡航

感兴趣的同学可以如此编码进去进行练习提交

c++满分题解:

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
 
const LL inf = 1e18;
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int n;
    string t;
    cin >> n >> t;
    vector<int> id(26, -1);
    int cnt = 0;
    for(auto &i : t){
        id[i - 'a'] = cnt;
        ++ cnt;
    }
    vector<vector<array<int, 3>>> edge(26);
    vector<array<int, 4>> query(n);
    for(int i = 0; i < n; ++ i){
        string s;
        cin >> s;
        int st = s.front() - 'a';
        int ed = s.back() - 'a';
        int sign = 0;
        int len = s.size() - 1;
        for(auto &i : s){
            if (id[i - 'a'] != -1){
                sign |= (1 << id[i - 'a']);
            }
        }
        edge[ed].push_back({st, len, sign});
        query[i] = {st, ed, sign, len};
    }
    int up = (1 << cnt);
    vector<vector<vector<LL>>> dis(26, vector<vector<LL>>(26, vector<LL>(up, inf)));
    for(int i = 0; i < 26; ++ i){
        dis[i][i][up - 1] = 0;
        priority_queue<array<LL, 3>> team;
        team.push({0, i, up - 1});
        while(!team.empty()){
            array<LL, 3> top = team.top();
            team.pop();
            LL distance = -top[0];
            int u = top[1], sign = top[2];
            if (dis[i][u][sign] != distance)
                continue;
            for(auto &e : edge[u]){
                int v = e[0], len = e[1], si = e[2];
                int nxtsign = (sign ^ (sign & si));
                if (dis[i][v][nxtsign] > distance + len){
                    dis[i][v][nxtsign] = distance + len;
                    team.push({-dis[i][v][nxtsign], v, nxtsign});
                }
            }
        }
    }
    for(int i = 0; i < n; ++ i){
        LL ans = inf;
        int sign = query[i][2];
        for(int s = sign; s; s = (s - 1) & sign)
            ans = min(ans, dis[query[i][0]][query[i][1]][s]);
        ans = min(ans, dis[query[i][0]][query[i][1]][0]);
        if (ans == inf)
            ans = -1;
        else 
            ans += query[i][3];
        cout << ans << '\n';
    }
 
    return 0;
}

 运行结果:

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

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

相关文章

周报4_YMK

FlashAttention 硬件知识 以 A100 (40GB HBM) 为例&#xff0c;下面显示其内存层次结构的粗略图。SRAM内存分布在108个流式多处理器(SMs)上&#xff0c;每个处理器192KB。片上SRAM比HBM快得多&#xff0c;但比HBM小得多&#xff0c;在计算方面&#xff0c;使用Tensor Core的B…

【ARFoundation学习笔记】ARFoundation基础(上)

写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。难免出现纰漏&#xff0c;更多详细内容请阅读原文。 本文从原文第二章开始 文章目录 ARFoundation的体系Subsystem的使用跟踪子系统 ARSession & AR Session OriginARSessionARSe…

多目标优化中的“latent action”是什么?

2020 NeurIPS 中的“latent action”&#xff1a; Our model defines latent action as a boundary that splits the region represented by a node into a high-performing and a low performing region. 这里的latent action代表一个边界&#xff08;分类器&#xff09;&…

4 网络基础知识

1、 ifconfig&#xff1a; 1.Windows&#xff1a;ipconfig 2.Linux&#xff1a;ifconfigip addr2、 ifconfig 和 ip addr 的区别&#xff1f; 问题&#xff1a;假设你登录进入一个被裁剪过的非常小的 Linux 系统中&#xff0c;发现既没有 ifconfig 命令&#xff0c;也没有 ip…

CCF-CSP真题《202309-2 坐标变换(其二)》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-2试题名称&#xff1a;坐标变换&#xff08;其二&#xff09;时间限制&#xff1a;2.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 对于平面直角坐标…

【Mybatis小白从0到90%精讲】13: Mybatis sql片段,重用SQL的利器!

文章目录 前言SQL片段语句常见应用场景1. select 列字段2. where条件前言 代码复用是优秀程序员的标志之一,它能够减少代码冗余,提高代码可读性和可维护性。 在MyBatis开发中,Mapper中经常会有一些类似的SQL,如果每个语句都单独编写,会使代码冗长且难以维护。 MyBatis提…

Magics测量两个圆形中心点距离的方法

摘要&#xff1a;本文介绍如何使用magics测量两个圆孔之间的距离。 问题来源&#xff1a;3D模型打开后&#xff0c;两个圆孔中心点之间的间距测量无法直接通过测距实现&#xff0c;需要进行一些小小的设置才行。 工具选择“量尺”&#xff0c;如果不设置的话&#xff0c;它会默…

有关我自贡大盐商身世的两篇文章(一)

重游高坑岩瀑布随笔 都市噪杂喧嚣的生活&#xff0c;终于将我暂时逼离网络&#xff0c;决意出游数日&#xff0c;去山里寻找我向往的那些足以鼓舞人斗志的壮观瀑布&#xff0c;并试图从中领受它们那出自天然的&#xff0c;万马奔腾、猛烈撞击、拚抢速度、渲泄激情、永不妥协、…

【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度

文章目录 5.1 树的基本概念5.1.1 树的定义树有序树、无序树 5.1.2 森林的定义5.1.3 树的术语1. 父亲&#xff08;parent&#xff09;、儿子&#xff08;child&#xff09;、兄弟&#xff08;sibling&#xff09;、后裔&#xff08;descendant&#xff09;、祖先&#xff08;anc…

【软件测试】工作内容

测试工程师工作&#xff1a; 阶段&#xff1a;编写测试计划测试用例、测试缺陷报告并执行测试用例&#xff1b;搭建Windows测试环境熟练&#xff1b;使用Bugzilla 提交软件缺陷报告 使用测试技术及工具&#xff1a;白盒测试黑盒测试 Loadrunner、Winrunner 能够运用边界值、等…

go-sync-mutex

Sync ​ Go 语言作为一个原生支持用户态进程&#xff08;Goroutine&#xff09;的语言&#xff0c;当提到并发编程、多线程编程时&#xff0c;往往都离不开锁这一概念。锁是一种并发编程中的同步原语&#xff08;Synchronization Primitives&#xff09;&#xff0c;它能保证多…

【CMake】15分钟带你入门CMake

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

[黑马程序员SpringBoot2]——运维实用篇

目录&#xff1a; 工程打包与运行打包插件Boot工程快速启动&#xff08;Linux版本&#xff09;临时属性配置文件4级分类自定义配置文件多环境开发(yaml版)多环境开发多文件版&#xff08;yaml版&#xff09;多环境开发多文件版&#xff08;properties版&#xff09;多环境分组…

基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小

文章目录 基于AOSP源码Android-10.0.0_r41分支编译&#xff0c;framework开发&#xff0c;修改系统默认字体大小 基于AOSP源码Android-10.0.0_r41分支编译&#xff0c;framework开发&#xff0c;修改系统默认字体大小 主要修改一个地方就行 代码源码路径 frameworks/base/co…

直流无刷电机(BLDC)六步换相驱动

直流无刷电机&#xff08;BLDC&#xff09;六步换相驱动 文章目录 直流无刷电机&#xff08;BLDC&#xff09;六步换相驱动1. 前言2. 六步换相原理3. 电角度与机械角度4. 动手实践4.1 霍尔输出表测量4.2 换向控制4.3 代码编写 5. 总结 1. 前言 直流无刷电机相对直流有刷电机具…

AOE性能调优问题案例

AOE&#xff08;Ascend Optimization Engine&#xff09;是一款自动性能调优工具&#xff0c;目的是为了充分利用有限的硬件资源&#xff0c;满足算子和整网的性能要求。 本期就分享几个关于AOE性能调优问题的典型案例&#xff0c;并给出原因分析及解决方法。 调优过程中进程…

Mysql之多表查询上篇

Mysql之多表查询上篇 多表查询什么是多表查询笛卡尔积(交叉连接)产生笛卡尔积的条件避免笛卡尔积的方法 多表查询的分类1.等值连接 VS 非等值连接等值连接非等值连接扩展1表的别名扩展2&#xff1a;连接多个表 2.自连接与非自连接扩展3&#xff1a;SQL语法标准 内连接SQL92语法…

【大模型应用开发教程】04_大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析

大模型开发整体流程 & 基于个人知识库的问答助手 项目流程架构解析 一、大模型开发整体流程1. 何为大模型开发定义核心点核心能力 2. 大模型开发的整体流程1. 设计2. 架构搭建3. Prompt Engineering4. 验证迭代5. 前后端搭建 二、项目流程简析步骤一&#xff1a;项目规划与…

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(二)

目录 前言1. YOLOv7-PTQ量化流程2. 模型标定3. 敏感层分析 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 TensorRT下的模型量化&#xff0c;在其课程的基…

el-tree中展示项换行展示

文章目录 效果如下所示&#xff1a;没有换行展示的效果修改样式换行之后的展示效果 想要了解el-tree使用的详情往下看代码和数据如下所示Vue代码中可能使用到的数据如下Vue的代码如下&#xff1a;没有换行展示的效果换行之后的展示效果样式调试 效果如下所示&#xff1a; 没有…