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

2026.2.28 模拟赛

https://oj.gxyzh.com/d/hzoj/contest/699fbd72c524e405961f848c
这场比赛不太难,\(A\) 了两道。

两棵树

题解

由于联通块不方便计数,考虑转化。
发现 联通块个数=剩余点数-剩余边数
所以 \(X\times Y=(T_{点}-T_{边})(U_{点}-U_{边})=T_{点}U_{点}-T_{点}U_{边}-T_{边}U_{点}+T_{边}U_{边}\)
分类讨论:

  1. \(点 \times 点\) 每个点存在概率为 \(\frac{1}{2}\),相同的两个点存在概率为 \(0\),期望为 \(\frac{n(n-1)}{4}\)
  2. \(点 \times 边\) 每条边存在概率为 \(\frac{1}{4}\),当 边的顶点编号 与 点编号 相同时概率为 \(0\),期望为 \(\frac{(n-1)(n-2)}{8}\)
  3. \(边 \times 边\) 每对边存在概率为 \(\frac{1}{16}\),当 边的顶点编号 存在相同时概率为 \(0\)
    此情况不能直接计算,需要枚举每条边计算产生的贡献,设边为 \((x,y)\)\((u,v)\)
    \(n-1\) 减去与 \(x,y\) 重合的点 \(u,v\),若 \((x,y)=(u,v)\),则需要加回来,用 \(set\) 维护。
    时间复杂度 \(O(nlogn)\)

代码

#include<iostream>
#include<set>
#define  int  long long
using namespace std;
constexpr int N=2e5+5,p=998244353;
int n,m,ans,mul[5]={0,499122177,748683265,873463809,935854081};
struct E{ int u,v; }T[N];
set<int> s[N];
signed main(){ios::sync_with_stdio(0),cin.tie(0);cin>>n;for(int i=1;i<n;i++)cin>>T[i].u>>T[i].v;for(int i=1,u,v;i<n;i++)cin>>u>>v,s[u].insert(v),s[v].insert(u);ans=(n*(n-1)%p*mul[2]%p-(n-1)*(n-2)%p*mul[2]%p)%p;for(int i=1,u,v;i<n;i++){u=T[i].u,v=T[i].v;int cnt=n-1-s[u].size()-s[v].size();auto it=lower_bound(s[u].begin(),s[u].end(),v);cnt+=((*it)==v);ans=(ans+cnt*mul[4]%p)%p;}cout<<(ans+p)%p<<'\n';return 0;
}

编辑

题解

对于 \(60pts\),可以看 这道题。

对于 \(100pts\)
注意到题目对 \(dp\) 值域进行限制,且上面 \(O(n^3)\)\(dp\) 有许多相同的值 ,考虑将 值域 和 下标 转换(这种思想在数据结构中比较常用,\(dp\) 中比较难用)。

不妨将区间分组处理,先计算 \(T\) 的前缀。
\(dp_{i,j}\),表示 \(i\) 次修改,可以使得 \(S[1,\dots,dp_{i,j}]\) 可以转换为 \(T[1,\dots,dp_{i,j}+j]\),并且保证\(dp_{i,j}\) 最大,这里不难发现 \(j\in[-k,k]\)
转移考虑刷表,\(dp_{i,j}\gets dp_{i,j}+LCP(S[dp_{i,j}+1,\dots,n],T[dp_{i,j}+j+1,\dots,m])\)
然后再对 \(dp_{i+1,j},dp_{i+1,j-1},dp_{i+1,j+1}\) 转移。
这样可以 \(O(k^2)\) 得到 \(dp\),然后对于 \(dp_{i,j}=n\) 统计 \(ans\)

考虑对 \(T\) 每个后缀都这样处理,计算 \(LCP\) 使用 \(hash\) + 二分。
时间复杂度 \(O(nk^2logn)\)

代码

#include<iostream>
#include<string.h>
#define  ull  unsigned long long
using namespace std;
constexpr int N=5e4+5,M=35,p=131;
int K,ans[M],n,m,dp[M][M<<1];
char s[N],t[N];
ull hash1[N],hash2[N],pow[N]={1};
int flag[N];
int LCP(int x,int y){if(x>n||y>m||!x||!y)return 0;x--,y--; int L=-1,R=min(n-x,m-y)+1,mid;while(L+1<R){mid=(L+R)>>1;ull has1=hash1[x+mid]-hash1[x]*pow[mid];ull has2=hash2[y+mid]-hash2[y]*pow[mid];if(has1==has2)L=mid;else R=mid;}return L;
}void Solve(int id){for(int i=0;i<=K;i++)for(int j=-i;j<=i;j++){dp[i][j+K]=min(dp[i][j+K],n);dp[i][j+K]+=LCP(dp[i][j+K]+1,dp[i][j+K]+1+j+id);if(dp[i][j+K]==-1)continue;if(j-1+K>=0)dp[i+1][j-1+K]=max(dp[i+1][j-1+K],dp[i][j+K]+1);//删除末尾元素 dp[i+1][j+K]=max(dp[i+1][j+K],dp[i][j+K]+1);//修改末尾元素dp[i+1][j+1+K]=max(dp[i+1][j+1+K],dp[i][j+K]);//增添末尾元素 }for(int j=-K;j<=K;j++)flag[n+j]=1e9;for(int i=0;i<=K;i++)for(int j=-K;j<=K;j++)if(dp[i][j+K]==n&&0<n+j&&n+j<=m-id)flag[n+j]=min(flag[n+j],i);for(int j=-K;j<=K;j++)if(flag[n+j]!=1e9)ans[flag[n+j]]++;
}signed main(){ios::sync_with_stdio(0),cin.tie(0);cin>>K>>(s+1)>>(t+1);n=strlen(s+1),m=strlen(t+1);for(int i=1;i<=5e4;i++)pow[i]=pow[i-1]*p;for(int i=1;i<=n;i++)hash1[i]=hash1[i-1]*p+s[i];for(int i=1;i<=m;i++)hash2[i]=hash2[i-1]*p+t[i];for(int L=1;L<=m;L++){for(int i=0;i<=K;i++)for(int j=-K;j<=K;j++)dp[i][j+K]=-1;dp[0][K]=LCP(1,L);Solve(L-1);}for(int i=0;i<=K;i++)cout<<ans[i]<<'\n';return 0;
}
http://www.jsqmd.com/news/421778/

相关文章:

  • 基于C-V2X的协同感知、协同预测与协同规划:标准、现状与未来展望
  • 7. STL简介
  • 复合赋值运算符+字符串拼接优先级
  • 推荐一个口腔执业医师课程 - 医考机构品牌测评专家
  • 2026西安普内科副主任医师考试用书推荐, 高分考生亲测:这些教材成功上岸 - 医考机构品牌测评专家
  • 大盘风险控制策略分析报告 - 2026年02月28日
  • 指月之手——活在当下的意义行动
  • 7864838
  • 468513
  • C# 里的 dynamic 或者 object 在 C++ 里的对应
  • 在文本行内加个倒计时(循环)
  • 二进制部署 kafka 4.20 并开启认证
  • 论文写作神器:免费大纲,降AI率,轻松通过知网
  • WPForms 与 OptinMonster 结合:如何构建功能强大的浮动联系表单
  • 学术写作不求人:2026论文“去AI化”与降重软件盘点
  • 岩石的剪胀性
  • 收藏!揭秘Deepseek爆火背后的AI力量,企业如何借力实现数字化转型?
  • 2026年硕士论文攻略:从初稿生成到降AI率的工具合集
  • 别等被AI甩下!程序员收藏:AI转型不慌,这5大工具让你效率起飞!
  • 2026年AI趋势:落地为王!省钱、解决真问题才是硬道理,收藏看懂未来!
  • 最佳少儿编程APP推荐:为孩子选择合适的编程学习工具 - 品牌测评鉴赏家
  • 研究生论文写作神器:免费生成大纲,一键降AI率!
  • LazyLLM黑科技 | 继承就能自动注册?元类注册机制深度解析
  • 9个优质少儿编程免费体验课全面对比及学习场景分析 为什么要先让孩子试免费的少儿编程课? - 品牌测评鉴赏家
  • 国密算法+国产系统,KU 2208-H3海光服务器筑牢工控安全防线
  • 位运算符
  • SOLID、DRY、KISS、YAGNI 原则 / OWASP 安全最佳实践
  • SpringAI+Qwen3-8B打造本地知识库系统!代码+教程,速收藏!
  • 哪款蛋白粉适合中老年?2026最好最安全老年人蛋白粉品牌推荐,认准刚需别乱买 - 资讯焦点
  • Datawhale干货:5分钟上手!大语言模型驱动的智能体初探,收藏这份进阶指南!