当前位置: 首页 > news >正文

好看的串数据传输网络最小时延

两道机考题题解整理

题目一:好看的串

题目描述

小华有一个好看的串A。对于一个串,每次可以选择其中任意两个相邻且相同的字符,然后删除其中一个。

例如:

aabbbbaa

可以一次操作变成:

abbbbaa aabbbaa aabbbba

如果串X可以通过若干次删除操作得到串A,则X也是好看的串。

现在给定目标串A和字符串S,需要计算S中有多少个子串是好看的串。位置不同的相同子串算不同子串。

样例 1

输入:

1 1 a b

输出:

0

解释:

S中只有一个子串"b",无法通过删除相邻相同字符得到"a"

样例 2

输入:

3 6 aab aaabbb

输出:

6

解释:

目标串A = "aab",压缩后为:

a:2, b:1

所以合法子串必须是若干个连续的a后接若干个连续的b,并且a至少 2 个,b至少 1 个。

合法子串为:

aaab aaabb aaabbb aab aabb aabbb

6个。

题解思路

删除相邻相同字符,只会让某个连续段变短,不会改变连续段的字符顺序,也不会让某一段完全消失。

所以先把目标串A按连续字符压缩。

例如:

A = aab

压缩成:

字符段:a b 长度: 2 1

一个子串合法,当且仅当:

  1. 子串的连续字符段序列和A一样;
  2. 子串每一段长度都大于等于A对应段长度。

然后枚举S的所有子串,用indx表示当前匹配到目标串的第几段,用cnt表示当前段长度。

代码

#include<iostream>#include<vector>#include<string>usingnamespacestd;string A,S;intn,m;intmain(){cin>>n>>m>>A>>S;vector<char>ch;vector<int>need;// 压缩目标串 Afor(inti=0;i<n;){intj=i;while(j<n&&A[j]==A[i])j++;ch.push_back(A[i]);need.push_back(j-i);i=j;}intk=ch.size();longlongans=0;// 枚举子串左端点for(intl=0;l<m;l++){intcnt=0;intindx=0;// 枚举子串右端点for(intr=l;r<m;r++){if(S[r]==ch[indx]){cnt++;}else{// 上一段长度不够,失败if(cnt<need[indx])break;// 进入下一段indx++;// 段数超过目标串,失败if(indx>=k)break;// 新段字符不匹配,失败if(S[r]!=ch[indx])break;// 当前字符是新段的第一个字符cnt=1;}// 已经匹配到最后一段,并且长度够if(indx==k-1&&cnt>=need[indx]){ans++;}}}cout<<ans<<"\n";return0;}

复杂度

时间复杂度:O(m^2) 空间复杂度:O(n)

题目二:数据传输网络最小时延

题目描述

N个数据交换节点,编号为0N - 1。数据包从节点0开始,按编号顺序依次经过每个节点,到达节点N - 1

每个节点i默认产生delay[i]单位处理时延。

如果在节点i配置优先转发模式,它会影响本节点和后续win_size[i]个节点。受影响节点j的处理时延会减少opt_delay[i],如果多个节点同时影响j,则可以重复减少,但最终时延不能小于0

最多选择K个节点配置优先转发模式,求最小总处理时延。

约束:

3 <= N <= 50 0 <= K <= 10 0 <= win_size[i] <= 3

样例 1

输入:

3 1 50 40 30 3 0 1 0 50 10

输出:

80

解释:

选择节点1最优,节点1的处理时延从40降到0

总时延:

50 + 0 + 30 = 80

样例 2

输入:

5 2 10 20 30 40 50 1 0 1 3 2 15 20 0 30 35

输出:

65

解释:

选择节点0和节点3最优。

节点0影响节点01

节点 0: 10 -> 0 节点 1: 20 -> 5

节点3影响节点34

节点 3: 40 -> 10 节点 4: 50 -> 20

总时延:

0 + 5 + 30 + 10 + 20 = 65

题解思路

不能贪心,因为一个节点的收益会受到其他节点是否被选的影响。

关键限制是:

win_size[i] <= 3

所以处理节点i时,最多只有这几个节点能影响它:

i - 3, i - 2, i - 1, i

因此可以用状态压缩 DP,只记录前面 3 个节点是否被选。

定义:

dp[i][used][mask]

表示:

已经处理完前 i 个节点,也就是 0 ~ i - 1 已经选择了 used 个节点 最近 3 个节点的选择状态为 mask 此时的最小总时延

其中mask的含义:

bit0:i - 1 是否被选 bit1:i - 2 是否被选 bit2:i - 3 是否被选

每次处理节点i,枚举当前节点选或不选。

代码:三维 DP 写法

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intN,K;cin>>N>>K;vector<longlong>delay(N),opt_delay(N);vector<int>win_size(N);for(inti=0;i<N;i++)cin>>delay[i];for(inti=0;i<N;i++)cin>>win_size[i];for(inti=0;i<N;i++)cin>>opt_delay[i];constlonglongINF=4e18;// dp[i][used][mask]vector<vector<vector<longlong>>>dp(N+1,vector<vector<longlong>>(K+1,vector<longlong>(8,INF)));dp[0][0][0]=0;for(inti=0;i<N;i++){for(intused=0;used<=K;used++){for(intmask=0;mask<8;mask++){if(dp[i][used][mask]==INF)continue;// take = 0 表示不选 i// take = 1 表示选择 ifor(inttake=0;take<=1;take++){if(used+take>K)continue;longlongreduce=0;// 当前节点 i 被选,会影响自己if(take){reduce+=opt_delay[i];}// 检查 i - 1, i - 2, i - 3 是否能影响 ifor(intd=1;d<=3;d++){intp=i-d;if(p<0)continue;// mask 第 d - 1 位表示 i - d 是否被选if((mask>>(d-1))&1){if(p+win_size[p]>=i){reduce+=opt_delay[p];}}}longlongcurDelay=delay[i]-reduce;if(curDelay<0)curDelay=0;// 下一轮处理 i + 1// bit0 表示 i 是否被选// bit1 表示 i - 1 是否被选// bit2 表示 i - 2 是否被选intnewMask=((mask<<1)&7)|take;dp[i+1][used+take][newMask]=min(dp[i+1][used+take][newMask],dp[i][used][mask]+curDelay);}}}}longlongans=INF;// 最多选 K 个,所以 used 可以小于等于 Kfor(intused=0;used<=K;used++){for(intmask=0;mask<8;mask++){ans=min(ans,dp[N][used][mask]);}}cout<<ans<<"\n";return0;}

复杂度

时间复杂度:O(N * K * 8 * 2 * 3) 空间复杂度:O(N * K * 8)

因为N <= 50K <= 10,状态数量很小,可以轻松通过。

http://www.gsyq.cn/news/1359346.html

相关文章:

  • 深度解析ViVeTool-GUI架构设计:Windows功能控制工具的实现原理与实践应用
  • AI时代什么是高价值目标?
  • 如何在Windows 10/11上完美使用PS3手柄:DsHidMini虚拟HID驱动终极指南
  • 【Anaconda】使用指南及问题汇总(自用)
  • 2026 河北 GEO 优化服务商测评:理性看实力,盘古开物AI智推适配才是硬道理
  • 收藏干货|2026 新版 AI 应用开发入行攻略,程序员零基础玩转大模型
  • 多人在线会议如何同时操作电脑?支持多鼠标协同的软件盘点
  • 2026芜湖黄金回收哪家正规?鸿运名品黄金回收|资质齐全|如实报价|诚信经营 - 鸿运名品
  • 盘磨机磨盘齿形预测与参数化设计系统【附程序】
  • 从SEO到GEO:大模型时代,为什么你的优化策略必须“换引擎“?
  • PyMICAPS:基于Python的气象数据可视化解决方案,提升Micaps数据处理效率300%
  • 体验Taotoken官方价折扣与活动价在长期开发中带来的实际成本节省
  • AI Agent行业应用失效真相:87%失败源于这3个被忽视的领域知识耦合漏洞(附可复用领域本体建模框架)
  • 2026铜铝门十大品牌排名解析:一线品牌实力测评 知名品牌推荐 - 速递信息
  • Lovable连接器性能瓶颈诊断:当Airtable同步延迟超120秒,我们如何将数据吞吐提升4.8倍
  • 【零基础 AI 编程】Vibe Coding 小白指南第一课
  • 2026 兰州装修公司 TOP10 权威榜单:大平层 / 别墅 / 老房大改全案落地首选,零增项才是真省心 - 资讯纵览
  • WorldArena榜单第一名Pelican-Unify 1.0:迈向具身智能统一范式的新里程碑
  • 3步终极方案:让经典暗黑破坏神2在现代电脑上完美运行
  • 昇腾CANN的算子“零件厂“:catlass仓库到底在生产什么
  • P13376题解
  • OpenAI破解80年数学猜想,AI首次做出原创证明
  • 衢州自动变速箱维修连锁品牌排行榜发布 腾骅专修凭全国实力获五星 - 速递信息
  • 从零开始,使用curl命令直接测试Taotoken聊天补全接口
  • 知识竞赛背景图设计指南:在线工具3分钟快速搞定
  • 700亿融资后DeepSeek剑指AI Coding,人才布局与多线作战能否再现大模型神话?
  • Taotoken的审计日志与访问控制功能实际应用观察
  • 宁波催化燃烧机厂家五月新推荐,助力企业节能减排,环保设备/催化燃烧机/文丘里除尘器,催化燃烧机企业推荐 - 品牌推荐师
  • 2026年天津玻璃贴膜施工哪家靠谱?实测排名为你揭晓答案 去
  • 2026年海南自贸港财税服务商TOP5排行榜(综合评分),本土深耕度团队专业度客户口碑全类型企业靠谱代办机构选哪家? - 速递信息