尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

杂题选记

杂题选记
📅 发布时间:2026/6/19 21:25:57

记录一些我觉得比较有意思的题目。难度差异可能会很大。

书信

给一个字符串 \(S\),对于 \(S\) 中的每一类字符,可以选择一个区间 \([l,r]\) 保留,保留的字母间相对顺序不变。

每一个位置有权值 \(w_i\)。

求将 \(S\) 变为 \(T\) 的同时最小化删去位置的权值和。

解题思路

首先考虑刻画字母删除和保留。一个字母可以删除,则其前面/后面没有选择的相同字母。我们发现这个可以通过对 \(T\) 的匹配位数 \(j\) 来刻画。

于是设 \(f_{i,j}\) 表示 \(S[1,i]\) 匹配上 \(T[1,j]\) 的最小代价。

通过预处理,我们可以得知 \(L_c\) 和 \(R_c\) 表示 \(c\) 在 \(T\) 中出现的最前/最后位置。考虑当还没有用上 \(c\)(\(j<L_c\))和已经用完 \(c\)(\(j \geq R_c\))时可以删去 \(c\)。

于是转移:

\[\begin{array}{c} [j+1 < L_{s[i+1]}+1 \vee j+1 > R_{s[i+1]}]: f_{i,j}+w_{i+1} \to f_{i+1,j} \\ [S_{i+1}=T_{j+1}]: f_{i,j} \to f_{i+1,j+1} \end{array} \]

可以获得 \(30 pts\)。

考虑优化。可以发现第一个转移只和 \(j\) 以及 \(s[i+1]\)(具体的字母)有关。启发我们按照转移一的成立对 \(j\) 分组。具体来说,就是将所有的 \(L_c\),\(R_c+1\) 作为分界线,这样同一个段内的所有 \(j\) 对于相同的 \(c\) 的转移情况就是相同的了。

这样一共会分出 \(O(|\Sigma|)\) 个段。

同时,我们注意到段内的 \(j\) 向 \(j+1\) 的转移中,\(f_{i,j}+w_{i+1} \to f_{i+1,j}\) 和 \(f_{i,j} \to f_{i+1,j+1}\) 不同时成立。也即从 \((i,j_{1})\) 到 \((?,j_{k})\) 的转移路径是唯一的。我们只要把那些 \(f_{i,j} \to f_{i+1,j+1}\) 的位置提出来,用字符串哈希判断转移路径是否可行即可。

时间复杂度就是 \(O(Tn|\Sigma|)\)。

代码
#include<bits/stdc++.h>
#define int long long
#define fin(x) freopen(#x".in","r",stdin)
#define fout(x) freopen(#x".out","w",stdout)
#define file(x) (fin(x),fout(x),0)
using namespace std;
int My_File_IO=file(letter);
const int inf=1e16;
int n,m;
char s[200005],t[200005];
int w[200005],sumw;
namespace Hash{using ull=unsigned long long;using ui=__uint128_t;const ull mod=(1ull<<61)-1;const int bse=114514;inline ull pls(ull x,ull y){return (x+y>=mod?x+y-mod:x+y);}inline ull sub(ull x,ull y){return (x<y?x+mod-y:x-y);}inline ull mul(ull x,ull y){ui r=ui(x)*y;return pls(r>>61,r&mod);}ull fpow(ull a,ull b=mod-2){ull r=1;while(b){if(b&1)r=mul(r,a);a=mul(a,a);b>>=1;}return r;}ull pw[200005],ipw[200005];void init(){for(int i=pw[0]=1;i<=200000;i++)pw[i]=mul(pw[i-1],bse);ipw[200000]=fpow(pw[200000]);for(int i=199999;i>=0;i--)ipw[i]=mul(ipw[i+1],bse);}template<int siz>struct hsa{int usecnt;ull h[siz+1];void load(char *s,int n){for(int i=1;i<=n;i++)h[i]=pls(mul(h[i-1],bse),s[i]);usecnt=n;}void join(char s){usecnt++;h[usecnt]=pls(mul(h[usecnt-1],bse),s);}void cls(){usecnt=0;}ull cut(int l,int r){return sub(h[r],mul(h[l-1],pw[r-l+1]));}};
}
using Hash::hsa;
hsa<200005> hs,tmphs;
int fj[150],tot;
int f[200005];
int mn[30],mx[30];
void tmain(){cin>>n>>m>>(s+1)>>(t+1);for(int i=1;i<=n;i++)cin>>w[i],sumw+=w[i];hs.load(t,m);tot=sumw=0;for(int c=0;c<26;c++){mn[c]=m+1,mx[c]=0;for(int i=1;i<=m;i++)if(t[i]=='a'+c)mn[c]=min(mn[c],i),mx[c]=max(mx[c],i);if(mn[c]==m+1)continue;fj[++tot]=mn[c];fj[++tot]=mx[c]+1;}fj[++tot]=1;fj[++tot]=m+1;// for(int i=1;i<=m+1;i++)fj[++tot]=i;sort(fj+1,fj+1+tot);tot=unique(fj+1,fj+1+tot)-fj-1;f[0]=0;for(int i=1;i<=n;i++)f[i]=inf;for(int j=1;j<tot;j++){static int g[200005];fill(g,g+1+n,inf);for(int i=0;i<n;i++){if(fj[j]<mn[s[i+1]-'a']+1||fj[j]>mx[s[i+1]-'a'])f[i+1]=min(f[i+1],f[i]+w[i+1]);if(s[i+1]==t[fj[j]])g[i+1]=min(g[i+1],f[i]);}memcpy(f,g,(n+1)*sizeof(int));if(fj[j+1]==fj[j]+1)continue;tmphs.cls();int ct=fj[j+1]-fj[j]-1;static int sw[200005],ok[30],crs[200005];int tn=0;fill(g,g+1+n,inf);memcpy(sw,w,(n+1)*sizeof(int));memset(ok,0,sizeof ok);for(int c=0;c<26;c++)if(fj[j]<mn[c]||mx[c]<fj[j])ok[c]=1;for(int i=1;i<=n;i++)if(!ok[s[i]-'a'])sw[i]=0,crs[++tn]=i,tmphs.join(s[i]);for(int i=1;i<=n;i++)sw[i]+=sw[i-1];for(int i=0,ptr=1;i<n;i++){if(crs[ptr]<=i)ptr++;if(ptr+ct-1>tn)break;if(tmphs.cut(ptr,ptr+ct-1)!=hs.cut(fj[j]+1,fj[j+1]-1))continue;g[crs[ptr+ct-1]]=min(g[crs[ptr+ct-1]],f[i]+sw[crs[ptr+ct-1]]-sw[i]);}memcpy(f,g,(n+1)*sizeof(int));}for(int i=0;i<n;i++)f[i+1]=min(f[i+1],f[i]+w[i+1]);cout<<(f[n]>=inf?-1:f[n])<<'\n';
}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);Hash::init();int tid,t;cin>>tid>>t;while(t--)tmain();
}

相关新闻

  • 2025年12月铝材厂家推荐榜:廊坊国美铝业,工业铝材、门窗铝材、3C铝材、通用铝材、多领域铝材定制与绿色生产标杆
  • 2025年12月包头保洁公司最新推荐:信达家政,包头保洁开荒、包头高空清洗保洁、包头保姆公司、包头保姆家政、包头保姆月嫂、包头保姆护工、服务品质新标准
  • 机器视觉测量与建模

最新新闻

  • DeepSeek V4硬件适配实录:昇腾910B与H100双轨训练逻辑
  • SAP BOM查询实战:从正查到反查的完整指南
  • 【2026年6月】热水离心泵厂家推荐指南 - 多才菠萝
  • Python图片压缩方法全解:从入门到进阶
  • 【JAVA毕设源码分享】基于SpringBoot的中华传统文化网站(程序+文档+代码讲解+一条龙定制)
  • 全国学历提升继续教育学习体验实录

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号