2025-10-23 MX-S 模拟赛 赛后总结【MX】

news/2025/10/23 20:14:40/文章来源:https://www.cnblogs.com/AeeE5x/p/19161554

赛时 Record

  • 14:30 为何 T1 串串。
  • 14:45 摸了字符串哈希。这真的是大洋里吗,为何这么水。
  • 14:58 诶我草原来 T2 的 \(t_i\le 3\) 吗。
  • 15:22 试图推 T2 神秘 dp 式。
  • 16:00 被击败了。
  • 16:09 写出来了,最后发现是忘了判断 y==fa。然后发现大洋里错一堆。
  • 16:48 终于调出来了。太不容易了。
  • 17:04 T3 为何能背包。
  • 17:07 哦不能。没有最优子结构。
  • 17:33 放弃思考 T3 正解。摸个暴力走人。
  • 17:38 T4 T5 不想看了。结束比赛。

结果是 100+100+10+0+0。

T1 摸鱼酱爱看的

题意

摸鱼酱加了 \(n\) 个微信群,每个群有 \(m_i\) 条消息。

摸鱼酱会从 \(1\)\(n\) 依次打开每个群,当这条消息出现了 bie 子串且此前没有转发过,那么会把这条消息转发出去。

输出所有摸鱼酱转发的消息,如果这个群没有转发的消息,输出 Genshin Impact, start!

赛时

水题。

但我直接上了字符串哈希。

题解

我觉得这没什么需要解的地方。

不想写哈希直接用 map 或者 unordered_map 或者 set 都行。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define infll 0x3f3f3f3f3f3f3f3fll
using namespace std;const unsigned long long P1=131,P2=171;
const unsigned long long mod1=998244353,mod2=1000000007;pair<unsigned long long,unsigned long long> gethash(string s){pair<unsigned long long,unsigned long long> res={0,0};for(char c:s){res.first=(res.first*P1+c)%mod1;res.second=(res.second*P2+c)%mod2;}return res;
}bool hasbie(string s){for(int i=0;i+2<(int)s.length();i++) if(s[i]=='b'&&s[i+1]=='i'&&s[i+2]=='e') return true;return false;
}map<pair<unsigned long long,unsigned long long>,bool> mp;
int n;int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);freopen("message.in","r",stdin);freopen("message.out","w",stdout);cin>>n;for(int i=1;i<=n;i++){int m;cin>>m;bool chk=true;for(int j=1;j<=m;j++){string s;cin>>s;if(!hasbie(s)) continue;pair<unsigned long long,unsigned long long> shash=gethash(s);if(!mp[shash]) cout<<s<<"\n",chk=false;mp[shash]=1;}if(chk) cout<<"Genshin Impact, start!\n";}return 0;
}

T2 水晶蝶

题意

给你一棵树,所有边的长度均为 \(1\),摸鱼酱初始在 \(1\) 号节点。编号为 \(i\) 的节点上有 \(a_i\) 只水晶蝶,水晶蝶在摸鱼酱走到与其相邻的节点 \(t_i\) 时刻后就会飞走。

摸鱼酱走到一个节点后会抓住这个节点的所有水晶蝶。每个单位时间摸鱼酱可以走 \(1\) 单位长度。求出最多可以抓到的水晶蝶总数。

赛时

树形 DP 好题。

虽然卡我两个小时,但我还是喜欢这道题。

题解

策略很显然,走到一个节点后,遍历完整个子树一定不劣。

然后注意到 \(t_i\le 3\)

不难想到,\(t_i=2\) 对答案的贡献和 \(t_i=1\) 没有区别,对于走回头路,都对答案没有更多贡献。所以我们可以把 \(t_i\le 2\) 的点分为一类,\(t_i=3\) 的点分为一类。

考虑第一次走到一个节点时,它的所有子节点的水晶蝶都没有飞走。此时可以挑选任意一个节点,走到这个节点,并抓住这个节点的水晶蝶。

接下来有两种选择:

  • 继续往下走,等到子树全部遍历完再回到原节点。此时原节点子节点中产生贡献的只有第一次走入的节点和对应的子树。其他节点的水晶蝶一定会全部飞走。
  • 立刻返回原节点,这个时候,原节点子节点中还可能产生贡献的点只有 \(t_i=3\) 的点(可以自己手模一下)。所以就是在剩下的 \(t_i=3\) 的点中,挑一个继续往下走。剩下的子节点则没有贡献。而第一次走进的节点的所有子节点又会失去贡献。

很显然贪不了。所以考虑树形 dp。

\(dp_i\)不考虑 \(i\) 节点本身,走到当前节点后向子节点走,可以抓到的最大水晶蝶总数。

不难想到,失去所有子节点的贡献后的贡献就是所有子节点 \(dp\) 值的和,我们需要额外记录这个信息。

然后模拟一遍上述过程就行了。

需要注意的是,对于情况 2,我们可以记录所有 \(t=3\) 的子节点中,\(a_i\) 最大的点。但我们不能走到一个节点后再走一遍,这样会把贡献算重。

所以只记录最大值是不够的,我们需要同时记录最大和次大。

答案就是 \(dp_1+a_1\)

代码的转移可能比较难懂,可以多看看。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define infll 0x3f3f3f3f3f3f3f3fll
using namespace std;int n;
long long a[100010];
int t[100010];struct edge{int to,nxt;}e[200010];int head[100010],cnt=1;
inline void addedge(int x,int y){e[cnt]={y,head[x]},head[x]=cnt++;}long long dp[100010];
long long dpsum[100010];void dfs(int x,int fa=0){for(int i=head[x];i;i=e[i].nxt){int y=e[i].to;if(y==fa) continue;dfs(y,x);}int mx1=0,mx2=0;for(int i=head[x];i;i=e[i].nxt){int y=e[i].to;if(y==fa) continue;dpsum[x]+=dp[y];if(t[y]){if(a[y]>=a[mx1]) mx2=mx1,mx1=y;else if(a[y]>=a[mx2]) mx2=y;}}for(int i=head[x];i;i=e[i].nxt){int y=e[i].to;if(y==fa) continue;dp[x]=max(dp[x],dpsum[x]+a[y]);}for(int i=head[x];i;i=e[i].nxt){int y=e[i].to;if(y==fa) continue;if(y!=mx1) dp[x]=max(dp[x],dpsum[x]-dp[y]+a[y]+dpsum[y]+a[mx1]);if(y!=mx2) dp[x]=max(dp[x],dpsum[x]-dp[y]+a[y]+dpsum[y]+a[mx2]);}
}int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);freopen("crystalfly.in","r",stdin);freopen("crystalfly.out","w",stdout);int T;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>t[i],t[i]=(t[i]-1)/2;for(int i=1;i<n;i++){int x,y;cin>>x>>y;addedge(x,y);addedge(y,x);}dfs(1);cout<<dp[1]+a[1]<<"\n";for(int i=1;i<=n;i++) dp[i]=dpsum[i]=0;for(int i=1;i<=n;i++) head[i]=0;cnt=1;}return 0;
}

T3 RPG

题意

摸鱼酱有 \(n\) 个装备和 \(m\) 的能量上限。

每个装备有 \(p_i\) 点能量和 \(p_i\) 个参数 \(w_{i,1},w_{i,2},\dots w_{i,p_i}\)

你可以任意改变摸鱼酱穿戴装备的顺序。设穿戴装备 \(i\) 之前已经穿戴了 \(sum\) 能量的装备,则穿戴 \(i\) 装备带来的贡献为:

\[\begin{cases}w_{i,p_i}&&sum+p_i\le m,\\0&&sum\ge m,\\w_{i,m-sum}&&otherwise.\end{cases} \]

最大化这个贡献。

赛时

看着像背包,但是假了。

结果正解就是背包。

题解

注意到除了最后选的装备,其他装备的贡献都是 \(w_{i,p_i}\)

\(dp_{i,j,0/1}\) 表示当前选择前 \(i\) 个物品,已经使用了 \(j\) 的魔力,有 / 没有选到最后一个物品。

然后就是正常的背包转移。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define infll 0x3f3f3f3f3f3f3f3fll
using namespace std;int n,m;int p[3010];
long long a[3010][3010];long long dp[3010][3010][2];int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);freopen("rpg.in","r",stdin);freopen("rpg.out","w",stdout);cin>>n>>m;for(int i=1;i<=n;i++){cin>>p[i];for(int j=1;j<=p[i];j++) cin>>a[i][j];}memset(dp,-0x3f,sizeof dp);dp[0][0][0]=0;for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){dp[i][j][0]=dp[i-1][j][0];dp[i][j][1]=dp[i-1][j][1];if(j>=p[i]){dp[i][j][0]=max(dp[i][j][0],dp[i-1][j-p[i]][0]+a[i][p[i]]);dp[i][j][1]=max(dp[i][j][1],dp[i-1][j-p[i]][1]+a[i][p[i]]);}for(int k=1;k<=p[i];k++) if(k<=j) dp[i][j][1]=max(dp[i][j][1],dp[i-1][j-k][0]+a[i][k]); }}long long ans=dp[n][m][1];for(int i=0;i<=m;i++) ans=max(ans,dp[n][i][0]);cout<<ans<<"\n";return 0;
}

总结

T2 花的时间太多了。对 dp 不熟练。

T3 T4 和 T5 都由于时间原因没有仔细想。

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

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

相关文章

PCL1.12 解决memory.h中EIGEN处中断问题

PCL1.12 解决memory.h中EIGEN处中断问题在使用PCL1.12时,出现已在 VisionFormatWork.exe 中执行断点指令(__debugbreak () 语句或类似调用) 的提示。 __debugbreak() 是一个由编译器提供的 调试断点指令(类似汇编中…

深入解析:链表的核心思想

深入解析:链表的核心思想pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

AI元人文构想:参与“自由与责任”哲学思考——岐金兰之实验

AI元人文构想:参与“自由与责任”哲学思考——岐金兰之实验 让我们以“AI元人文”构想为透镜,重新审视“自由与责任”这一古老的哲学谜题。这将不再是一场纯粹的思辨,而是一次为智能行为构建底层架构的思想实验。 基…

20251023

总结 A 预计:100,实际:60 用时:10min思路历程:居然看错题了,以为可以整个一段全部是一个字母,关键是样例刚好全部能过 正解:666 收获:最好多看几遍题和数据范围B 预计:100,实际:100 用时:30min思路历程:…

Java常用机制 - SPI机制详解

目录Java常用机制 - SPI机制详解简单介绍SPI工作流程SPI实现代码示例步骤 1:定义服务接口步骤 2:提供具体实现(由不同厂商提供)步骤 3:创建配置文件步骤 4:使用 ServiceLoader 发现并调用服务输出可能为:需要SP…

实用指南:用户研究:用户研究和数据分析的根本联系与区别

实用指南:用户研究:用户研究和数据分析的根本联系与区别2025-10-23 20:01 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

2025.10.23——2绿2蓝

普及+/提高 P2914 [USACO08OCT] Power Failure G 最短路,简单预处理 P9912 [COCI 2023/2024 #2] Zatopljenje T1,离线树状数组 提高+/省选- P9906 [COCI 2023/2024 #1] Kocke T2,没想到的DP P9031 [COCI 2022/2023 …

Anaconda命令大全conda

创建虚拟环境 conda create --name myenvpython37 python=3.7使用该虚拟环境 conda activate myenvpython37退出使用虚拟环境 conda deactivate

完整教程:状态管理库 Zustand 的接入流程与注意点

完整教程:状态管理库 Zustand 的接入流程与注意点pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

采用opencv来识别信用卡的号码

采用opencv来识别信用卡的号码pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

塔吊施工环境与附属设施监测!思通数科 AI 卫士筑牢全场景安全防线

塔吊施工安全不仅依赖核心部件与人员操作合规,周边环境与附属设施的隐患也常成为 “安全盲区”:塔吊周边地面是否存在积水、泥泞,易引发作业人员滑倒,但人工巡检易忽视此类环境细节;有限空间入口处安全标识、警示…

精读《C++20设计模式》:重新理解设计模式系列 - 详解

精读《C++20设计模式》:重新理解设计模式系列 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

网络设备

1. 交换机(缓存接入的所有设备的ip,mac地址等) 2. 路由器(公司级,企业级)

Kafka-保证消息消费的顺序性及高可用机制 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

第二十二篇

今天是10月23号,上了算法课,体测1000米。

CSharp: Convert CSV to XLS Using Open XML SDK

using System; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Globalization; using CsvHelper; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging…

实用指南:PyTorch 数据处理工具箱:从数据加载到可视化的完整指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

《程序员修炼之道:从小工到专家》阅读笔记1

2025年的今天,当AI代码助手能自动生成70%基础代码时,程序员的核心竞争力究竟是什么?《程序员修炼之道》序言以"生存指南"的定位给出震撼答案:真正的高手从不依赖工具,而是凭借责任意识、持续学习与批判…

多级多卡训练模型时有些参数没有参与loss计算和梯度更新的解决办法

在运行程序的bash命令中添加 export TORCH_DISTRIBUTED_DEBUG=DETAIL ,这样就可以在log或终端打印没有参与loss计算的权重参数了。

负载均衡及三种软件负载

[!TIP] 环境用nginx反向代理文档里的三台服务器即可一、基于nginx的负载均衡 七层负载:配置nginx.conf主配置文件 vim /etc/nginx/nginx.conf 在http块内添加: upstream userLB(随意){ #server写的ip:端口号(8080为t…